ReferenceEquals(null, obj)和null == obj是相同的吗?(这是一个关于IT技术的问题)

27

它们是同一件事吗?

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

并且

if (null == obj) return false;
2个回答

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)

(对于 null 检查同样如此。)


19

如果obj的类型被定义为object,那么情况就一样。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接