Linq表达式如何确定平等?

sma*_*man 11 c# linq lambda expression linq-expressions

我正在考虑使用Linq Expression作为字典中的键.但是,我担心我会得到奇怪的结果,因为我不知道Linq表达式如何确定Equality.

派生自Expression的类是否比较值相等或引用相等?或者换句话说,

        Expression<Func<object>> first = () => new object(); 
        Expression<Func<object>> second = ()=>new object();
        bool AreTheyEqual = first == second;
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 11

您的测试比较表达式.表达本身只提供参考平等; 你的测试可能会显示"假".为了获得语义上的平等,你需要做很多工作,例如:

x => 123
Run Code Online (Sandbox Code Playgroud)

y => 123
Run Code Online (Sandbox Code Playgroud)

当量?作为原始测试,您可以比较ToString(),但这将非常脆弱.