可能重复:
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,因为它们具有相同的标准?
答案 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/