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

.NET Framework 3.5 新特性:Lambda 表達式完整指南

     編輯:關於.NET

.NET Framework 3.5 (C# 3.0) 引入 Lambda 表達式,是委派與匿名方法的語法簡化,極大提升了函數式程式設計的表達力。本文從委派演進脈絡切入,詳細解析 Lambda 語法與實戰應用。

一、從委派到 Lambda 的演進

C# 1.x/2.0:委派與具名方法

public delegate bool Filter(int num);

public int[] SearchArray(int[] values, Filter filter) {
    List<int> result = new List<int>();
    foreach (int i in values) {
        if (filter(i)) result.Add(i);
    }
    return result.ToArray();
}

// 具名方法
public bool MyFilter(int num) {
    return ((num & 1) == 0);
}

// 呼叫
int[] intArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] evenArray = SearchArray(intArray, MyFilter);

本質上,Filter 被編譯為繼承 System.MulticastDelegate 的類別,僅供編譯器使用,原始碼中不可直接撰寫。

C# 2.0:匿名方法

int[] evenArray = SearchArray(intArray, delegate(int i) { return ((i & 1) == 0); });

以內聯程式碼取代獨立方法定義,簡化呼叫端撰寫。

C# 3.0 (.NET 3.5):Lambda 表達式

語法結構:

(param1, param2, ..., paramN) => {
    運算式1;
    運算式2;
    return 回傳值;
}
  • 參數型別可省略(編譯器推斷)
  • 大括號內容等同方法主體

二、Lambda 表達式多種寫法

1. 無參數

public delegate void Method1();
public void Test() {
    Method1 method1 = () => { int i = 4; i += 6; };
}

2. 單一參數(括號可省略)

public delegate void Method2(int i);
public void Test() {
    Method2 method2 = i => { i++; i += 6; };
}

3. 多參數與回傳值

public delegate int Method3(int x, int y);
public void Test() {
    Method3 method3 = (x, y) => { x++; y++; return x + y; };
}

4. 實戰改寫:篩選偶數陣列

int[] intArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] evenArray = SearchArray(intArray, i => { return (i & 1) == 0; });

// 或先指派給委派變數
Filter filter = i => { return (i & 1) == 0; };
int[] evenArray = SearchArray(intArray, filter);

三、本質解析:語法糖而非 IL 新指令

Lambda 表達式經 C# 編譯器編譯後,仍會轉換為委派形式。它是語法層面的改進,非 IL 新指令。以下兩行程式碼等價:

Filter filter = i => { return (i & 1) == 0; };
Filter filter = delegate(int i) { return ((i & 1) == 0); };

掌握 Lambda 表達式,是掌握 LINQ、函數式程式設計與現代 C# 開發的關鍵基石。

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