C#对象比较
有人可以指出重载operator==
的想法来执行深度对象比较(而不是参考比较)。
来自MSDN:
默认情况下,operator ==通过确定两个引用是否指示同一对象来测试引用相等性。 因此,引用类型不必实现operator ==以获得此function。 当一个类型是不可变的,也就是说,实例中包含的数据不能被改变,重载operator ==来比较值的相等而不是引用相等可能是有用的,因为作为不可变对象,它们可以被认为是相同的因为它们具有相同的价值。 在非不可变类型中覆盖operator ==不是一个好主意。
什么时候才真正受益?
并且,如果每个对象都有方法Equals
,这使得值比较成为可能,为什么有人会使用x == y
语句执行值 (而不是引用)比较?
我想我不明白,因为这对我来说很奇怪。
重载==
运算符允许你编写x == y
,这比x.Equals(y)
更自然,并且即使x
为null也可以工作。
重载operator ==
只会提高代码的可读性。 始终对您定义的类型使用.Equals(),尤其是深度对象比较。
System.String
是引用类型的经典示例,它受益于深度值相等比较而不是引用比较。
通常,在某些情况下,它使代码更容易编写,并且通过值比较而不是通过引用比较更好地表达相等的含义。