首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 3.0 Lambda 與匿名方法差異深度解析:從語法糖到 Statement Lambda

     編輯:關於C#

為什麼 Lambda 比匿名方法短那麼多?

直接比較同樣功能的匿名方法與 Lambda:


delegate int SampleDelegate(int x, int y);

static void Calculate(int x, int y, SampleDelegate calculator) {
    Console.WriteLine(calculator(x, y));
}

static void Main() {
    // 匿名方法
    Calculate(1, 2, delegate(int x, int y) { return x + y; }); // 輸出 3

    // Lambda 表達式
    Calculate(1, 2, (x, y) => x + y); // 輸出 3
}

關鍵差異逐項拆解

  • delegate 關鍵字消失:被 => 運算子取代,從 8 字元減為 2 字元。
  • return 關鍵字消失:Lambda 本身是「運算式」,單一運算式結果即為回傳值,無需 return。
  • 參數型別宣告消失:委派型別 SampleDelegate 已定義參數為 int, int,編譯器可推斷 x, y 為 int。
  • 大括號 { } 與分號 ; 消失:因為是運算式而非陳述式區塊。
  • 新增 => 運算子:讀作「輸入給…」,如 (x, y) => x + y 為「輸入 x, y 產出 x+y」。

這些簡化並非魔法,而是編譯器利用現有型別資訊進行推斷,嚴謹性完全不減。

Statement Lambda(Lambda 陳述式)

前面看到的都是「運算式 Lambda」。若邏輯較複雜需多行陳述式,可用大括號包裹形成「Statement Lambda」:


Action method = filename => {
    if (filename == null)
        Console.WriteLine("Hello!");
    else
        System.IO.File.WriteAllText(filename, "Hello!");
};

method(null);       // 輸出 Hello!
method("hello.txt"); // 產生 hello.txt

運算式 vs 陳述式對照

形式範例
運算式 Lambda(n) => a == n;
陳述式 Lambda(n) => { return a == n; };

雖然字數增加,但當無法用單一運算式表達時,僅多一個 return 的成本完全可接受。

核心觀念:型別推斷的前提

Lambda 與匿名方法同樣依賴目標委派型別進行型別推斷。若無法從上下文推斷型別(如直接指派給 var),兩者都無法使用。這點必須牢記。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved