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

C# 3.0 Lambda 表達式深度解析:從匿名方法到表達式樹

     編輯:關於C語言

Lambda 表達式:更優雅的匿名方法

Lambda 表達式可視為 C# 2.0 匿名方法的進化版本。在 C# 2.0 中,我們透過 delegate 關鍵字編寫內聯程式碼區塊,例如篩選列表中的偶數:

List<int> evenNumbers = list.FindAll(delegate(int i) { return (i % 2) == 0; });

雖然匿名方法減少了「極小函數」的宣告,但在語法上仍顯得冗長。

C# 3.0 的簡潔寫法

C# 3.0 引入 Lambda 運算子 =>,讓程式碼更加直觀:

var evenNumbers = list.FindAll(i => (i % 2) == 0);

此處 i => (i % 2) == 0 即為 Lambda 表達式,參數型別由編譯器自動推斷,大幅提升可讀性。更複雜的範例:

fruit.FilterBy((string name, double price) => name == "banana" && price < 2.00);

Lambda 表達式樹:將程式碼視為資料

更強大的是 System.Linq.Expressions 命名空間提供的表達式樹功能。它允許在執行時將 Lambda 表達式視為資料結構進行分析、修改或動態編譯:

using System.Linq.Expressions;

Expression<Func<int, bool>> filter = n => (n * 3) < 5;

BinaryExpression lt = (BinaryExpression)filter.Body;
BinaryExpression mult = (BinaryExpression)lt.Left;
ParameterExpression param = (ParameterExpression)mult.Left;
ConstantExpression three = (ConstantExpression)mult.Right;
ConstantExpression five = (ConstantExpression)lt.Right;

Console.WriteLine("({0} ({1} {2} {3}) {4})", 
    lt.NodeType, mult.NodeType, param.Name, three.Value, five.Value);
// 輸出:(LT (Multiply n 3) 5)

這項技術讓我們能動態解析查詢邏輯、建構動態 LINQ 查詢,或實現規則引擎等進階場景,極大增強了程式的靈活性。

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