C#/ Lambda:以下参考的param是什么?

时间:2010-10-06 06:14:53

标签: c# lambda

我正在查看here

中的代码
/// <summary>
/// Returns the command that, when invoked, attempts
/// to remove this workspace from the user interface.
/// </summary>
public ICommand CloseCommand
{
    get
    {
        if (_closeCommand == null)
            _closeCommand = new RelayCommand(param => this.OnRequestClose());

        return _closeCommand;
    }
}

param中的param => this.OnRequestClose()指的是什么?

4 个答案:

答案 0 :(得分:16)

RelayCommand可能是一个委托类型,它接受一个参数,或本身在构造函数中采用这种委托类型的类型。你正在声明一个匿名方法,简单地说“在调用时,我们将获取传入的值(但不使用它),并调用OnRequestClose。你也可以(可能更清楚):

_closeCommand = new RelayCommand(delegate { this.OnRequestClose(); });

在使用 的其他用途中可能更清楚,例如:

var ordered = qry.OrderBy(item => item.SomeValue);

其中lambda是“给定item”,获取item的{​​{1}}“。在您的情况下,lambda是“给定SomeValue,忽略param并致电param

答案 1 :(得分:1)

param =&gt; this.OnRequestClose()是lambda

Func<sometype_that_param_is,sometype_that_OnRequestClose_Is>

或     操作

我不确定哪个

所以它只是一个由某个东西调用的func的表达式,它将传递一个参数,该参数将是'param'然后不使用

答案 2 :(得分:1)

无。该行定义了表示函数的lambda表达式。该函数具有如下签名:Foo(T param),其中T将是编译器根据被调用的构造函数的类型所引入的特定类型。

答案 3 :(得分:1)

param是lambda表达式的唯一参数(param =&gt; this.OnRequestClose())

在实例化ICommand对象时,param可能包含从UI传递给此ICommand的参数。在您的情况下,该参数未在命令中使用(它不会出现在lambda表达式的右侧)。