可能重复:
Is it necessary to override == and != operators when overriding the Equals method? (.NET)
C#编译器提示我如果覆盖==我应该覆盖equals,我只是想知道为什么?
答案 0 :(得分:12)
如果您通过==
重新定义平等,如果==
与.Equals
做出非常不同的事情,.Equals
与.Equals
非常不同,那么真的会让人感到困惑必须是后备,因为在编译时不知道类型时,只有==
可用。因此,定义==
确实意味着:定义!=
,Equals
,GetHashCode
和IEquatable<T>
,并可能为T
实施{{1}} 1}}。
答案 1 :(得分:4)
因为否则你将有两个语义相似的操作可能会产生不同的结果,这意味着很多混乱。
我不确定编译器是否会阻止你,或者它是否只是一个警告,但在任何一种情况下,通常都可以确保它们的行为相同。
double.NaN == double.NaN
与double.NaN.Equals(double.NaN)
之类似。
答案 2 :(得分:1)
因为否则您会得到不同的结果,具体取决于您进行比较的方式。
执行x == y
可能会产生与y == x
不同的结果(如果x
和y
是不同的类型)。其他比较,例如在列表中查找值或将其用作字典中的键不会使用==
运算符,因此根本不起作用。