2009-06-09 9 views

Répondre

32

Vous verriez généralement ceci dans l'implémentation d'un opérateur ==.

Par exemple:

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 
} 

Vous ne voulez pas utiliser:

if (f1 == f2) 

parce que cela va dans le même récursif code! Une alternative est:

if ((object)f1 == (object)f2) 

(Et même pour le contrôle nul.)
19

Il est la même chose si obj est typée comme object.

Si le type de la variable définit un opérateur d'égalité statique ou un opérateur null, il sera différent; et si obj est défini comme Nullable<T> alors le compilateur interviendra et vérifiera HasValue à la place.