Является ли ReferenceEquals (null, obj) тем же, что и null == obj? - PullRequest
27 голосов
/ 09 июня 2009

Это то же самое?

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

и

if (null == obj) return false;

Ответы [ 2 ]

32 голосов
/ 09 июня 2009

Обычно это можно увидеть в реализации оператора ==.

Например:

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)

(И то же самое для проверки нуля.)

19 голосов
/ 09 июня 2009

То же самое, если obj напечатано как object.

Если тип переменной определяет оператор статического равенства или нулевой оператор, то он будет другим; и если obj определено как Nullable<T>, тогда включится компилятор и проверит HasValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...