ReferenceEquals(null,obj)与null == obj是一回事吗?
这是一回事吗?
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)
(对于空检查也一样。)
如果obj
被输入为object
,则是同样的事情。
如果变量的类型定义了静态相等运算符或空运算符,那么它将是不同的; 如果obj
被定义为Nullable
那么编译器将介入并检查HasValue
。