Lambda函数使用未知参数

Ofe*_*fer 5 c# lambda

我看到PRISM声明了以下构造函数,我不明白当调用基本构造函数时,作为第二个参数的lambda函数使用的"o"是什么:

public DelegateCommand(Action<T> executeMethod)
    : this(executeMethod, (o)=>true)
{            
}
Run Code Online (Sandbox Code Playgroud)

我很感激解释.

pok*_*oke 11

你发布的声明的构造函数调用另一个构造函数,所以为了解释它,我们首先应该看看其他构造函数的签名:

public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod)
Run Code Online (Sandbox Code Playgroud)

所以第二个参数是a Func<T, bool>.这意味着它是一个接受类型参数T并返回布尔值的函数.

现在,如果你看一下使用的lambda:

(o) => true
Run Code Online (Sandbox Code Playgroud)

Lambdas通常具有语法(parameter-list) => lambda-body,因此在这种情况下,lambda的单个参数是一个变量o(推断出该类型T),并且该函数返回一个常量结果true.

这样做的目的是基本上创建一个始终可执行的命令.

当然,lambda看起来要复杂得多,所以在使用DelegateCommand时,你可能会使用更复杂和非常量的表达式.例如:

 new DelegateCommand(DoSomething, o => o.SomeProperty >= 0 && o.SomeProperty < 10 && o.SomeBoolProperty)
Run Code Online (Sandbox Code Playgroud)


Mat*_*igh 3

它调用这个构造函数:

DelegateCommand<T>(Action<T>, Func<T, Boolean>)
Run Code Online (Sandbox Code Playgroud)

传递始终返回 true 的 lambda 作为第二个参数