2008-10-16 51 views

回答

27

The MSDN page on anonymous methods explains it

在C#2.0版本之前,聲明委託的唯一 方法是使用 命名方法。 C#2.0引入了 匿名方法,並在C#3.0和 之後,lambda表達式取代了 匿名方法,作爲首選方式 來編寫內聯代碼。但是,有關 中的匿名方法的信息 此主題也適用於lambda 表達式。在 中有一個案例,其中匿名方法提供了 功能,該功能在lambda 表達式中找不到。匿名方法使您可以省略參數列表 ,並且 這意味着可以將具有 各種簽名的匿名方法 轉換爲委託。對於lambda表達式,這不是 。有關 更多有關 lambda表達式的信息,請參閱Lambda 表達式(C#編程指南)。

And regarding lambda expressions

lambda表達式是一個可以包含表達式和語句,並且可以用於創建代表或表達式樹類型的匿名函數。 所有的lambda表達式都使用lambda運算符=>,它被讀作「去往」。 lambda運算符的左側指定輸入參數(如果有的話),右側保存表達式或語句塊。 lambda表達式x => x * x被讀取爲「x轉到x次x」。該表達式可以如下分配給代表類型:

10

首先,方便性:lambda表達式更易於讀寫。

二,表達式:lambda表達式可被編譯到委託,表達式樹(Expression<T>一些代表類型T,如Func<int,bool>)。表達式樹更令人興奮,因爲它是LINQ處理數據存儲的關鍵。

Func<int,bool> isEven = i => i % 2 == 0; 
Expression<Func<int,bool>> isEven = i => i % 2 == 0; 

注意with語句機構lambda表達式只能被編譯爲代表,不Expression S:

Action a =() => { Console.WriteLine(obj.ToString()); }; 
21
  1. 匿名方法的基本功能是沒有名字的,有創造封鎖的能力。
  2. Lambda表達式是可轉換爲匿名方法和表達式樹的構造,並遵循比匿名方法更復雜的類型推斷規則。

或多或少細微的差別的範圍由埃裏克利珀(C#語言設計師)在他的博客中解釋說:

22
  1. Lambda表達式可以轉換爲委託或表達式樹(有一些限制);匿名方法只能被轉換爲代表
  2. Lambda表達式允許對參數類型推斷:無括號
  3. Lambda表達式允許身體被截斷爲只是一個表達式(返回一個值),或單一語句(在其他情況下) 。
  4. Lambda表達式允許將參數列表縮短爲僅當參數名稱可以推斷時以及只有一個參數時的參數列表。匿名方法允許參數列表在主體內未使用時完全省略並且不會導致歧義

最後一點是匿名方法相對於lambda表達式的唯一好處,我相信。這是非常有用的一個無操作訂閱雖然創建一個類似字段的事件:

你應該有一個「真棒」徽章
public event EventHandler Click = delegate{}; 
+1

.. – nawfal 2013-12-20 14:09:14

相關問題