ReferenceEquals(null,obj)与null == obj是一回事吗?

Pra*_*ter 27 c#

这是一回事吗?

if (ReferenceEquals(null, obj)) return false;
Run Code Online (Sandbox Code Playgroud)

if (null == obj) return false;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 32

您通常会在==运算符的实现中看到这一点.

例如:

public static bool operator ==(Foo f1, Foo f2)
{
    if (ReferenceEquals(f1, f2))
    {
        return true;
    }
    if (ReferenceEquals(f1, null) || ReferenceEquals(f2, null))
    {
        return false;
    }
    // Now do comparisons
}
Run Code Online (Sandbox Code Playgroud)

你不想使用:

if (f1 == f2)
Run Code Online (Sandbox Code Playgroud)

因为那会递归到相同的代码!另一种选择是:

if ((object)f1 == (object)f2)
Run Code Online (Sandbox Code Playgroud)

(对于空检查也一样.)


Mar*_*ell 19

如果obj输入为同样的事情object.

如果变量的类型定义了静态相等运算符或空运算符,那么它将是不同的; 如果obj定义为,Nullable<T>那么编译器将介入并检查HasValue.