2016-04-22 81 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類做一些額外的閱讀。

相關問題