5

Josh Smith による MVVM に関する MSDN マガジンの記事には、完全には理解できないラムダ式が含まれています。このコードのparamの目的は何ですか?

_saveCommand = new RelayCommand(param => this.Save(),
                param => this.CanSave );

私の好みの言語 VB に翻訳すると、次のようになります。

Dim saveAction as New Action(Of Object)(AddressOf Me.Save)
_saveCommand = New RelayCommand(saveAction, Function(param) Me.CanSave)

CanSaveまたはSave内で使用されている場合、paramのみが表示されると予想していました。私はラムダ式に少し慣れていません。私が知る限り、どこでも宣言も使用もされていない変数を見るのは奇妙です。説明をいただければ幸いです。

これをコンテキストに入れると、RelayCommand (C#) のコンストラクターは次のようになります。

public RelayCommand(Action<object> execute, Predicate<object> canExecute)

そしてVBで:

Public Sub New(ByVal execute As Action(Of Object), _
               ByVal canExecute As Predicate(Of Object))
4

1 に答える 1

3

ラムダ式それを宣言しています - それが現れる場所は基本的に宣言です。そうでない場合は、 と互換性がありませんAction(Of Object)。そのため、実際にはその値は必要ありませんが、そこにあるのです。

匿名メソッドでは、パラメーター値が必要ない場合は、パラメーター リストを完全に省略できます。

_saveCommand = new RelayCommand(delegate { this.Save(); },
     delegate { return this.CanSave; });

...しかし、ラムダ式ではそれができません。パラメータリストを指定する必要あります - 単一のパラメータのパラメータ名として、または括弧内の完全なリストとして指定する必要があります。提示したコードは次と同等です。

_saveCommand = new RelayCommand((Object param) => this.Save(),
     (Object param) => this.CanSave);
于 2010-07-23T12:50:18.923 に答える