Подтвердить что ты не робот

Is ReferenceEquals (null, obj) то же самое, что и null == obj?

Это одно и то же?

if (ReferenceEquals(null, obj)) return false;

и

if (null == obj) return false;
4b9b3361

Ответ 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.