【发布时间】:2011-06-29 07:20:19
【问题描述】:
我正在考虑使用 Linq 表达式作为字典中的键。但是,我担心我会得到奇怪的结果,因为我不知道 Linq 表达式如何确定 Equality。
从表达式派生的类是比较值相等还是引用相等?或者换句话说,
Expression<Func<object>> first = () => new object();
Expression<Func<object>> second = ()=>new object();
bool AreTheyEqual = first == second;
【问题讨论】:
-
你试过了吗? LinqPad 非常适合测试小型 sn-ps 代码。
-
这个问题不是基于正确的前提;
Dictionary<,>确实不使用==运算符进行键相等。 -
在这种情况下,它们既没有相同的参考也没有价值。
-
@Rangoric 在我看来它们的值是相同的(即使它们使用引用相等语义):生成的表达式树将具有具有相同类型和相同值的对象。甚至它们的字符串表示形式也是一样的。
标签: c# linq lambda expression linq-expressions