【发布时间】:2014-05-16 20:14:17
【问题描述】:
当用于比较匿名类型时,为什么 Equals() 和 == 的语义不同?为什么一个比较值而另一个比较引用?背后的原因是什么?
【问题讨论】:
标签: c# equality anonymous-types
当用于比较匿名类型时,为什么 Equals() 和 == 的语义不同?为什么一个比较值而另一个比较引用?背后的原因是什么?
【问题讨论】:
标签: c# equality anonymous-types
== 不调用Equals,它寻找== 重载运算符。由于匿名类型没有重载 == 运算符,因此 C# 对其使用引用比较。
但是对于Equals,它会比较字段值。这就是== 和Equals 之间的结果不同的原因。
Anonymous Types (C# Programming Guide)
因为匿名类型的 Equals 和 GetHashCode 方法是 根据 Equals 和 GetHashCode 方法定义 属性,相同匿名类型的两个实例仅相等 如果它们的所有属性都相等。
【讨论】: