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

时间:2009-06-09 14:17:48

标签: c#

这是一回事吗?

if (ReferenceEquals(null, obj)) return false;

if (null == obj) return false;

2 个答案:

答案 0 :(得分: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
}

您不想使用:

if (f1 == f2)

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

if ((object)f1 == (object)f2)

(对于空检查也一样。)

答案 1 :(得分:19)

如果obj被输入为object,则同样如此。

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