问题介绍:
在编程中,经常需要判断两个是否相等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中文网其他相关文章!