2013-09-16 137 views
5

我看到PRISM聲明下面的構造,我不知道那是什麼「O」被與作爲當基類的構造被稱爲第二個參數的lambda函數使用:lambda函數使用未知參數

public DelegateCommand(Action<T> executeMethod) 
    : this(executeMethod, (o)=>true) 
{    
} 

我很感激一個解釋。

+0

它只是一個輸入參數未使用的謂語 - 在這種情況下,謂詞總是返回true - 我懷疑是在情況下,默認的無謂語是通過 – BrokenGlass

+0

本[教程]。 (http://msdn.microsoft.com/en-us/library/vstudio/bb882516.aspx)將幫助您瞭解匿名方法和lambda。順便說一句,它只是一個輸入參數。 –

回答

3

它調用此構造函數:

DelegateCommand<T>(Action<T>, Func<T, Boolean>) 

傳遞一個lambda,它總是返回作爲第二個參數

11

您發佈調用,聲明另一個構造函數構造真實的,所以要解釋一下,我們應該先看看在另一個構造函數的簽名:

public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod) 

所以第二個參數是一個Func<T, bool>。這意味着它是一個函數,它採用T類型的參數並返回一個布爾值。

現在,如果你看一下所使用的拉姆達:

(o) => true 

lambda表達式一般有語法(parameter-list) => lambda-body,所以在這種情況下,拉姆達的一個參數是一個變量o(哪種類型推斷爲T),該函數返回一個常數結果true

這樣做的目的是基本上生成一個始終可執行的命令。

當然,lambda可能看起來更加複雜,因此使用DelegateCommand時,可能會使用更復雜和非常量的表達式。例如:

new DelegateCommand(DoSomething, o => o.SomeProperty >= 0 && o.SomeProperty < 10 && o.SomeBoolProperty) 
+0

我知道lambda函數是什麼,熟悉PRISM和這個基礎構造函數(只要命令始終是activa就可以使用)。我剛纔問了關於SYNTAX。你回答說:「在這種情況下,lambda的單個參數是變量o(哪種類型被推斷爲T)」,但我仍然不明白爲什麼「o」,因爲單個參數已經被賦予名稱爲「executeMethod」。提前致謝! – Ofer

+1

@Ofer整個表達式'(o)=> true'的類型爲'Func ',並且是構造函數參數'canExecuteMethod'的值。 'o'只是變量名稱,在這種情況下可以自由選擇,它採用'Func '參數的函數參數。你可以改爲命名爲'parameterToTheCanExecuteMethod':'(parameterToTheCanExecuteMethod)=> true'。如果它使得distrinction更清楚,你還可以添加額外的括號:'...:this(executeMethod,((parameterToTheCanExecuteMethod)=> true))''。 – poke