C#编译器提示我如果覆盖==,我应该覆盖equals,我只想知道为什么?
问问题
316 次
3 回答
12
如果您通过 重新定义相等性,如果与 做一些非常不同的事情==
,它会变得非常混乱,并且必须作为后备,因为在编译时不知道类型时,只有可用。因此,定义实际上意味着:定义、和,并可能为某些实现。==
.Equals
.Equals
.Equals
==
==
!=
Equals
GetHashCode
IEquatable<T>
T
于 2012-11-16T10:25:54.593 回答
4
因为否则您将有两个语义相似的操作,可能会产生不同的结果,这意味着很多混乱。
我不确定编译器是阻止你还是只是一个警告,但在任何一种情况下,确保它们的行为相同通常都是好的。
double.NaN == double.NaN
与vs有类似的东西double.NaN.Equals(double.NaN)
。
于 2012-11-16T10:25:34.333 回答
1
因为否则,根据您进行比较的方式,您将获得不同的结果。
做x == y
可能会产生与做不同的结果y == x
(如果x
和y
是不同的类型)。其他比较,例如在列表中查找值或将其用作字典中的键不使用==
运算符,因此根本不起作用。
于 2012-11-16T10:40:06.583 回答