Is ReferenceEquals (null, obj) то же самое, что и null == obj?
Это одно и то же?
if (ReferenceEquals(null, obj)) return false;
и
if (null == obj) return false;
Ответ 1
Обычно вы видите это в реализации оператора ==.
Например:
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)
(И то же самое для нулевой проверки.)
Ответ 2
Это то же самое, если obj набирается как object.
Если тип variable определяет статический оператор равенства или нулевой оператор, то он будет другим; и если obj определяется как Nullable<T>, тогда компилятор будет входить и проверять HasValue.