当Equals的参数为空引用时,返回True是否可以接受?

Ken*_*ing 0 .net c#

文档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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*ell 6

Nullable<T>.Equals(object) 如下:

public override bool Equals(object other)
{
    if (!this.HasValue)
    {
        return (other == null);
    }
    if (other == null)
    {
        return false;
    }
    return this.value.Equals(other);
}
Run Code Online (Sandbox Code Playgroud)

因此,对于struct具有可空语义的(值类型),您的问题的答案是肯定的.如果你的类型是class(引用类型),答案肯定是否定的.