2012-05-04 226 views
5

我正在讀拉動開關here,並遇到此代碼。什麼是()=> {}是什麼意思?

somoone請解釋什麼是() => {},我應該閱讀哪些內容才能理解該行代碼?

var moveMap = new Dictionary<string, Action>() 
{ 
    {"Up", MoveUp}, 
    {"Down", MoveDown}, 
    {"Left", MoveLeft}, 
    {"Right", MoveRight}, 
    {"Combo",() => { MoveUp(); MoveUp(); MoveDown(); MoveDown(); }} 
}; 

moveMap[move](); 
+0

這是一個Lambda表達式,請參閱[MSDN](http://msdn.microsoft.com/zh-cn/library/bb397687.aspx)以獲取更多信息。 – MatthiasG

回答

9

這是一個lambda expression

所有lambda表達式使用拉姆達操作=>,它讀作 「去」。拉姆達運算符的左側指定的輸入參數(如果有的話),右側持有表達式或語句塊

基本上你是在這裏建造一個新的,臨時的功能只是調用的兩個組合其他功能。

如上所示,左側的()表示它有一個空的參數列表(就像您的其他功能一樣)。右邊的{}表示它在一個塊內部執行幾個語句,這使得它成爲一個「語句lambda」,它被稱爲副作用,與「表達式lambda」計算值相反。

+3

如果它不是匿名的,它不是lambda。只是在說'。 – tdammers

+0

@tdammers:呵呵,你有一個點。 –

+0

已編輯 - 它實際上並沒有調用其他4個函數,而是其中每個函數都有兩次... –

4

這是一個lambda expression。 MSDN是指它作爲一個「語句拉姆達」:

聲明拉姆達類似於除了 語句(多個)被包圍在括號表達式拉姆達。

該字典包含一組Actions(代表)。 4是明確定義的,第5個是一個匿名函數,它調用其他兩個函數。最後一行代碼調用一個Action(它通過鍵從字典中檢索委託並調用它)。

4

() => {/*code*/}lambda表達式,這是一種創建採用零參數的匿名委託的便捷方法。本質上它會創建一個可調用的代碼片段,在您的案例中向上移動兩次,然後向下移動兩次。

您不限於lambda表達式不帶參數 - 你可以帶參數的創建者:

Action<string> callable = (name) => {Console.WriteLine("Hello, {0}!", s);}; 
callable("world"); 
callable("quick brown fox"); 
3

()這是匿名函數不帶參數

=>是λ-運算符(發音爲轉到)

字典已用KeyValuePair初始化,最後一個選項是一個匿名函數,它不接受參數並調用其他函數