我在Jon Skeet的回答中閱讀了這條有趣的線here。()的含義=>在C#中的運算符,如果存在
有趣行都是這樣的,在那裏他主張使用委託:
Log.Info("I did something: {0}",() => action.GenerateDescription());
的問題是,這是什麼()=>運營商,我不知道?我試着用谷歌搜索它,但因爲它是由符號組成的,Google真的沒有什麼幫助。我在這裏尷尬地錯過了什麼嗎?
我在Jon Skeet的回答中閱讀了這條有趣的線here。()的含義=>在C#中的運算符,如果存在
有趣行都是這樣的,在那裏他主張使用委託:
Log.Info("I did something: {0}",() => action.GenerateDescription());
的問題是,這是什麼()=>運營商,我不知道?我試着用谷歌搜索它,但因爲它是由符號組成的,Google真的沒有什麼幫助。我在這裏尷尬地錯過了什麼嗎?
這裏介紹一個不帶參數的lambda函數(匿名委託),它相當於基本上簡寫爲:
delegate void() { return action.GenerateDescription(); }
你可以還添加參數,所以:
(a, b) => a + b
這大致相當於:
delegate int (int a, int b) { return a + b; }
可能是'return action.GenerateDescription();',不是? – abatishchev 2010-09-02 14:08:41
@abatishchev:謝謝,修正。 – 2010-09-02 15:15:49
粗略地說,確實如此。對於我的一系列關於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
創建一個匿名委託給指定的方法。
也許,在你的情況下,這將是一個Func<string>
這是一個lambda表達式的示例,您可以從中瞭解更多here。
甚至比通過篩選SO更好直接去源:http://msdn.microsoft.com/en-us/library/bb397687.aspx – 2010-09-02 16:38:04
這是通過匿名委託沒有參數作爲lambda表達式的方式。
從.NET 2.0
Log.Info("I did something: {0}", delegate()
{
return action.GenerateDescription();
});
可能'返回action.GenerateDescription();',不是?否則錯誤「不能將空白到字符串」,類似的東西 – abatishchev 2010-09-02 14:19:05
@abatishchev,可能是的。把它從頭頂寫下來,所以我不確定它是否編譯完成。 – PiRX 2010-09-02 15:39:23
你可以請嘗試,如果它會失敗 - 請編輯你的文章?) – abatishchev 2010-09-02 19:23:55
與此類似「=>」這是運營商的λ,當我們沒有我們的λ操作之前只使用圓括號任何輸入參數。
語法: (輸入參數)=>表達
注意語法它是=>即操作者和(),並且是它的操作數的表達。這是一個奇怪的操作員;大多數二元運算符需要兩個表達式,而不是一個參數列表和一個表達式或塊。 – 2010-09-02 16:51:30