挑战:
给定方法签名:
public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
确定确定两个表达式是否等价的最有效方法。此评估应仅支持简单的 MemberExpressions,例如 c => c.ID.
建议的解决方案:
下面介绍了支持数组、新运算符等的 Marc 代码的优化版本。它采用了一种更优雅的方法来比较 AST。
public static class LambdaCompare { public static bool Eq<TSource, TValue>( Expression<Func<TSource, TValue>> x, Expression<Func<TSource, TValue>> y) { return ExpressionsEqual(x, y, null, null); } ... private static bool ExpressionsEqual(Expression x, Expression y, LambdaExpression rootX, LambdaExpression rootY) { ... } ... }
详细说明:
优点:
以上是如何高效比较 C# 中 Lambda 表达式的相等性?的详细内容。更多信息请关注PHP中文网其他相关文章!