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