如何测试表达式的相等性

时间:2012-09-01 16:11:03

标签: c# lambda expression

  

可能重复:
  Most efficient way to test equality of lambda expressions
  How to check if two Expression<Func<T, bool>> are the same

如何测试两个表达式是否与此示例相同

        string firstname = "Ahmed";
        Expression<Func<string, bool>> exp1 = (s) => s.Contains(firstname);
        Expression<Func<string, bool>> exp2 = (s) => s.Contains(firstname);

        Console.WriteLine(exp1 == exp2);//print false as two references are no equal

现在如何确保expression1等于expression2,因为它们具有相同的标准?

2 个答案:

答案 0 :(得分:3)

如果你想检查表达式是否相等,不只是它们总是以相同的方式评估,你可以这样做:

exp1.ToString() == exp2.ToString()

请注意,即使是无关紧要的更改也会导致返回false,例如在此类中使用j => j.Contains(firstname)或使用exp2

public class Test
{
    static string firstname;
    public static Expression<Func<string, bool>> exp2 = s => s.Contains(firstname);
}

(即使lambda在代码中看起来相同,ToString显示一个正在使用Test.firstname而另一个正在使用编译器生成的类firstname

但是,根据表达式的来源,这可能很有用。

答案 1 :(得分:1)

以下是ExpressionEqualityComparer的代码,可以显示如何执行此操作。

https://source.db4o.com/db4o/trunk/db4o.net/Db4objects.Db4o.Linq/Db4objects.Db4o.Linq/Expressions/