2010-09-02 19 views
28

我在Jon Skeet的回答中閱讀了這條有趣的線here()的含義=>在C#中的運算符,如果存在

有趣行都是這樣的,在那裏他主張使用委託:

Log.Info("I did something: {0}",() => action.GenerateDescription()); 

的問題是,這是什麼()=>運營商,我不知道?我試着用谷歌搜索它,但因爲它是由符號組成的,Google真的沒有什麼幫助。我在這裏尷尬地錯過了什麼嗎?

+2

注意語法它是=>即操作者和(),並且是它的操作數的表達。這是一個奇怪的操作員;大多數二元運算符需要兩個表達式,而不是一個參數列表和一個表達式或塊。 – 2010-09-02 16:51:30

回答

46

這裏介紹一個不帶參數的lambda函數(匿名委託),它相當於基本上簡寫爲:

delegate void() { return action.GenerateDescription(); } 

你可以還添加參數,所以:

(a, b) => a + b 

這大致相當於:

delegate int (int a, int b) { return a + b; } 
+4

可能是'return action.GenerateDescription();',不是? – abatishchev 2010-09-02 14:08:41

+0

@abatishchev:謝謝,修正。 – 2010-09-02 15:15:49

+2

粗略地說,確實如此。對於我的一系列關於lambda語法和匿名方法語法之間的細微差異的系列文章,請點擊這裏:http://blogs.msdn.com/b/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous -methods-part-one.aspx – 2010-09-02 16:53:24

2

創建一個匿名委託給指定的方法。

也許,在你的情況下,這將是一個Func<string>

3

這是一個lambda表達式的示例,您可以從中瞭解更多here

+0

甚至比通過篩選SO更好直接去源:http://msdn.microsoft.com/en-us/library/bb397687.aspx – 2010-09-02 16:38:04

1

這是通過匿名委託沒有參數作爲lambda表達式的方式。

從.NET 2.0

Log.Info("I did something: {0}", delegate() 
      { 
       return action.GenerateDescription(); 
      }); 
+0

可能'返回action.GenerateDescription();',不是?否則錯誤「不能將空白到字符串」,類似的東西 – abatishchev 2010-09-02 14:19:05

+0

@abatishchev,可能是的。把它從頭頂寫下來,所以我不確定它是否編譯完成。 – PiRX 2010-09-02 15:39:23

+0

你可以請嘗試,如果它會失敗 - 請編輯你的文章?) – abatishchev 2010-09-02 19:23:55

6

與此類似「=>」這是運營商的λ,當我們沒有我們的λ操作之前只使用圓括號任何輸入參數。

語法: (輸入參數)=>表達