2016-04-22 46 views
1

阅读this文章中,我发现了一个奇怪的方式来传递参数给对象:这是传递参数的正确方法吗?

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

这是错字或传递参数正确方法?

+0

它是中继命令它通过这种方式 –

+1

它是如果参数是委托或表达式,这意味着您可以传递lambdas。 – juharr

+2

请参阅:https://msdn.microsoft.com/en-us/library/bb397687.aspx –

回答

2

你所看到的并不是适用于一般属性的东西,例如,如果参数是一个字符串,你将无法使用name => statement语法。

如果你看看RelayCommand的定义,你会看到参数的类型为Action这是一种特殊的类型,它允许你将代码或方法块作为对象传递,这些通常称为代理。

您提到的语法称为Lambda,它们有几种形式。

最简单的是() => doSomething()在这种情况下,lambda不采用任何参数,只调用doSomething方法。

接下来是一个在此代码中采用参数param => doSomething(param)的lambda,变量param仅仅是lambda的代码体的局部变量,可以使用,并且执行lambda的代码需要传递一些东西在这里,这是一个更完整的例子;

var myLambda = param => doSomething(param); 
myLambda("some string value"); 

所以在这个例子中,字符串将被传递给doSomething方法。

这些示例仅涵盖了lambda,它将转换为Action类,但您也可以编写一个lambda来给您一个Func。还有另一种形式叫Predicate这实质上是一个返回true或false的Action;

我会建议在ActionFunc类和Predicate类做一些额外的阅读。

相关问题