为什么这个lambda表达式中的param?

Dev*_*Dan 5 lambda mvvm relaycommand

JWS Smith在MVVM上发表MSDN杂志文章包含一个我不完全理解的lambda表达式.这段代码中param的目的是什么?

_saveCommand = new RelayCommand(param => this.Save(),
                param => this.CanSave );
Run Code Online (Sandbox Code Playgroud)

翻译成我的首选语言VB它是:

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

如果在CanSave或Save中使用它,我本来期望只看到param.我对lambda表达式有些新意.在我看来,看到一个既没有声明也没用过的变量对我来说很奇怪.任何解释将不胜感激.

要把它放在上下文中,RelayCommand(C#)的构造函数是:

public RelayCommand(Action<object> execute, Predicate<object> canExecute)
Run Code Online (Sandbox Code Playgroud)

在VB中:

Public Sub New(ByVal execute As Action(Of Object), _
               ByVal canExecute As Predicate(Of Object))
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 3

lambda 表达式正在声明它——它出现的地方基本上就是一个声明。如果没有,它将不兼容Action(Of Object)。这就是它存在的原因 - 即使您实际上并不需要该值。

使用匿名方法,如果不需要任何参数值,可以完全省略参数列表:

_saveCommand = new RelayCommand(delegate { this.Save(); },
     delegate { return this.CanSave; });
Run Code Online (Sandbox Code Playgroud)

...但是你不能用 lambda 表达式来做到这一点。您必须指定参数列表 - 要么只是作为单个参数的参数名称,要么是括号中的完整列表。您提供的代码相当于:

_saveCommand = new RelayCommand((Object param) => this.Save(),
     (Object param) => this.CanSave);
Run Code Online (Sandbox Code Playgroud)