【发布时间】:2011-02-23 23:52:47
【问题描述】:
是一样的吗?
if (ReferenceEquals(null, obj)) return false;
和
if (null == obj) return false;
【问题讨论】:
标签: c#
是一样的吗?
if (ReferenceEquals(null, obj)) return false;
和
if (null == obj) return false;
【问题讨论】:
标签: c#
您通常会在 == 运算符的实现中看到这一点。
例如:
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<T>,那么编译器将介入并检查HasValue。
【讨论】: