2009-06-09 2 views

ответ

32

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

Например:

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

Это то же самое, если obj набирается в object.

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

Смежные вопросы