它们是同一件事吗?
if (ReferenceEquals(null, obj)) return false;
并且
if (null == obj) return false;
它们是同一件事吗?
if (ReferenceEquals(null, obj)) return false;
并且
if (null == obj) return false;
你通常会在实现 == 运算符时看到这个。
例如:
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 检查同样如此。)
如果obj
的类型被定义为object
,那么情况就一样。
如果变量的类型定义了静态相等性运算符或null运算符,那么它们将是不同的;如果obj
被定义为Nullable<T>
,那么编译器将介入并检查HasValue
。