阅读this文章我找到了一种将参数传递给对象的奇怪方法:
_saveProductCommand = new RelayCommand(
param => SaveProduct(),
param => (CurrentProduct != null)
这是错误或传递参数的正确方法吗?
答案 0 :(得分:2)
您所看到的并不适用于常规属性,例如,如果参数是字符串,则无法使用name => statement
语法。
如果查看RelayCommand的定义,您将看到参数的类型为Action
,这是一种特殊类型,允许您将代码块或方法块作为对象传递,这些通常称为Delegates。 / p>
您所指的语法称为Lambda
,它们有几种形式。
最简单的是() => doSomething()
在这种情况下,lambda不接受任何参数,只调用doSomething
方法。
接下来是一个lambda,在此代码中接受参数param => doSomething(param)
变量param
只是lambda代码主体能够使用的局部变量,以及执行的代码lambda需要传递一些东西,这是一个更完整的例子;
var myLambda = param => doSomething(param);
myLambda("some string value");
因此,在此示例中,字符串将传递给doSomething
方法。
这些示例仅涵盖了将转换为Action
类的lambda,但您也可以编写一个lambda,它将为您提供Func
。还有另一种称为Predicate
的形式,它本质上是一个返回true或false的Action;