2010-11-02 14 views
5

¿cuál es la mejor práctica para sobrecargar == operador que compara dos instancias de la misma clase cuando se trata de comparación de referencia nula?C#: mejor práctica para sobrecargar == operador cuando se trata de referencias nulas

MyObject o1 = null; 
MyObject o2 = null; 
if (o1 == o2) ... 


static bool operator == (MyClass o1, MyClass o2) 
{ 
    // ooops! this way leads toward recursion with stackoverflow as the result 
    if (o1 == null && o2 == null) 
    return true; 

    // it works! 
    if (Equals(o1, null) && Equals(o2, null)) 
    return true; 

    ... 
} 

¿Cuál es el mejor enfoque para manejar referencias nulas en comparación?

Respuesta

11

Me he preguntado si existe un "mejor enfoque". Así es como lo hago:

static bool operator == (MyClass o1, MyClass o2) 
{ 
    if(object.ReferenceEquals(o1, o2)) // This handles if they're both null 
     return true;     // or if it's the same object 

    if(object.ReferenceEquals(o1, null)) 
     return false; 

    if(object.ReferenceEquals(o2, null)) // Is this necessary? See Gabe's comment 
     return false; 

    return o1.Equals(o2); 

} 
+4

Los 'object.ReferenceEquals (O2, null))' cheque no es estrictamente necesario. Las probabilidades son lo primero que 'Equals' hace es hacer la misma comprobación. – Gabe

1
if (ReferenceEquals(o1, null) && ReferenceEquals(o2, null)) 
    return true; 

etc

Cuestiones relacionadas