这是传递参数的正确方法吗?

时间:2016-04-22 20:17:00

标签: c# syntax

阅读this文章我找到了一种将参数传递给对象的奇怪方法:

_saveProductCommand = new RelayCommand(
                param => SaveProduct(),
                param => (CurrentProduct != null)

这是错误或传递参数的正确方法吗?

1 个答案:

答案 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;

我建议您对Action班级Func班级和Predicate班级做一些额外的阅读。