C#/Lambda:以下代码中的param是指什么?

5

我在查看这里的代码。

/// <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 => this.OnRequestClose()中的param指的是什么?

4个回答

16

RelayCommand 大概是一个接受单个参数的委托类型,或者是在构造函数中本身需要这样一个委托类型的类型。你正在声明一个匿名方法,简单地说“当调用时,我们将接收传入的值(但不使用它),并调用OnRequestClose。” 你也可以这样写(可能更清晰):

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

在其他应用中,它的使用可能会更清晰,例如:

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

lambda 表示“给定一个 item,获取该 itemSomeValue”。在您的情况下,lambda 是“给定 param,忽略 param 并调用 OnRequestClose()”。


这是一个很好的答案,如果明确写出为 delegate(object param) { this.OnRequestClose(); },可能会更清晰。 - Dave
@Dave - 不,那是一个非常故意的选择,展示了一种语法,当你不使用参数时(在我看来)更清晰。实际上,我会更喜欢使用lambda版本(如原始问题所述),而不是delegate(object param) {...} - Marc Gravell
我也不会使用我上面评论中的显式形式,我只是将其作为解释性工具来展示lambda表达式中'param'的含义。 - Dave

1

参数 => this.OnRequestClose() 是一个 lambda 函数

Func<sometype_that_param_is,sometype_that_OnRequestClose_Is>

或者 操作

我不确定哪个

所以这只是一个被某些东西调用的函数的表达式,它将传递一个参数,该参数将是“param”,然后不会被使用


1

没有什么。这行代码定义了一个lambda表达式,表示一个函数。该函数具有类似于:Foo(T param)的签名,其中T将是由编译器根据调用构造函数的参数类型推断出的特定类型。


1

param是您的lambda表达式的唯一参数(param=>this.OnRequestClose())

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接