这是一回事吗?
if (ReferenceEquals(null, obj)) return false;
和
if (null == obj) return false;
答案 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
。