問題介紹:
在程式設計中,經常需要判斷兩個是否相等lambda 表達式表示相同的函數。由於 lambda 表達式的動態性質以及缺乏可訪問的 AST 比較方法,這可能具有挑戰性。
問題陳述:
給出以下方法簽名:
public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
確定兩個lambda 表達式是否相同的最有效方法是什麼?有問題的表達式僅限於簡單的 MemberExpressions(例如 c => c.ID)。
解:
要有效比較 lambda 表達式,可以使用對其底層 AST(抽象語法樹)進行操作的自訂演算法。以下是Marc 程式碼的改進版本,支援各種場景,並可作為NuGet 套件提供:
public static class LambdaCompare { // ... (code omitted for brevity) ... }
此更新的解決方案比以前的方法具有多個優勢:
用法示例:
var result = LambdaCompare.Eq(u1 => u1.ID, u2 => u2.ID); // returns true
使用LambdaCompare的好處:
以上是如何有效率地比較兩個 Lambda 表達式的相等性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!