代码之家  ›  专栏  ›  技术社区  ›  DeveloperDan Asaf

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

  •  5
  • DeveloperDan Asaf  · 技术社区  · 16 年前

    这个 MSDN magazine article by Josh Smith on MVVM 包含一个我不完全理解的lambda表达式。你的目的是什么 参数

    _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中使用。我对lambda表达式有些陌生。就我所知,看到一个既没有声明也没有在任何地方使用的变量对我来说都很奇怪。如有任何解释,将不胜感激。

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

    在VB中:

    Public Sub New(ByVal execute As Action(Of Object), _
                   ByVal canExecute As Predicate(Of Object))
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   Jon Skeet    16 年前

    lambda表达式 声明它-它出现的地方基本上是一个声明。如果没有,它就不能与 Action(Of Object) . 这就是为什么它在那里-即使你实际上并不需要价值。

    对于匿名方法,如果不需要任何参数值,可以完全忽略参数列表:

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

    ... 但是你不能用lambda表达式。你呢 指定参数列表-仅作为单个参数的参数名,或括号中的完整列表。您提供的代码相当于:

    _saveCommand = new RelayCommand((Object param) => this.Save(),
         (Object param) => this.CanSave);
    
    推荐文章