How to test expressions equality [duplicate]

自作多情 提交于 2019-12-13 00:36:02

问题


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

How to test that two expressions are the same like this sample

        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

now how to ensure that expression1 equals to expression2 , as they have the same criteria?


回答1:


Here is the code for ExpressionEqualityComparer which can show how to do it.

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




回答2:


If you want to check if the expressions are equal, not just that they always evaluate the same way, you can do this:

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

Note that even insignificant changes will cause this to return false, like making it j => j.Contains(firstname) or using exp2 from this class:

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

(even though the lambdas look the same in the code, the ToStrings show that one is using Test.firstname and the other is using a compiler-generated class's firstname)

Still, this might be useful depending on where your expressions come from.



来源:https://stackoverflow.com/questions/12229338/how-to-test-expressions-equality

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!