【发布时间】:2009-10-07 23:31:40
【问题描述】:
Object.Equals 的文档说,如果参数是空引用,实现者必须返回 false。
在我的课堂上,我将覆盖 Equals 以检查值是否相等。我有一个类似于Nullable (T) 结构的成员变量。当我传递一个空引用并且我的结构的 HasValue 属性为 False 时,我最初的倾向是返回 True。
当 Equals 的参数是空引用时返回 True 是否可以接受?
编辑 举例说明:
class ExampleClass {
SomeValueType? x;
bool Equals(object other) {
if (other == null) return false; // <-- returns a different value than x.Equals
return x.Equals(other);
}
}
【问题讨论】:
-
null==null 吗?这是一个正确的哲学罐头。
-
@spender: 当
this为null且代码null==null中的文字为真时,永远无法调用Object.Equals,因此这一点没有实际意义。 -
啊。这只是为了方便。我仍然在脑海中与它作斗争。
-
默认操作符 == 调用
Object.Equals(Object a,Object b),返回(Object.ReferenceEquals(a,null) ? Object.ReferenceEquals(b,null) : a.Equals(b))。