C#对象比较

时间:2011-03-06 17:17:00

标签: c# comparison equality

是否有人指出重载operator==以执行深层对象(而非参考比较)的想法。

来自MSDN:

  

默认情况下,operator ==通过确定两个引用是否指示同一对象来测试引用相等性。因此,引用类型不必实现operator ==以获得此功能。当一个类型是不可变的,也就是说,实例中包含的数据不能改变时,重载operator ==来比较值的相等而不是引用相等可能是有用的,因为作为不可变对象,它们可以被认为是相同的因为它们具有相同的价值。在非不可变类型中覆盖operator ==不是一个好主意。

什么时候才真正受益?

并且,如果每个对象都有方法Equals,这使得价值比较成为可能,为什么有人会使用 (非参考)进行比较x == y声明?

我想我不明白,因为这对我来说很奇怪。

3 个答案:

答案 0 :(得分:6)

重载==运算符可让您编写x == y,这比x.Equals(y)更自然,即使x为空也会有效。

答案 1 :(得分:1)

重载运算符==只会提高代码的可读性。始终对您定义的类型使用.Equals(),尤其是深度对象比较。

答案 2 :(得分:0)

System.String是参考类型的典型示例,它受益于深度值相等比较而非参考比较。

通常,在某些情况下,它使代码更容易编写,并且通过值比较比通过参考比较更好地表达相等的含义。