2012-04-25 14 views
9

Una simple pregunta:C# abreviatura de Iguales() cuando ambos argumentos puede ser nulo

quiero comparar dos objetos usando los Iguales virtuales() método (no ==). Ambos pueden ser nulos.

¿Debo repetir esta letanía:

if ((left == null && right == null) || (left != null && left.Equals(right)) { 

} 

o hay un lenguaje más elegante para tal situación?

Respuesta

22

Sí:

if (object.Equals(left, right)) 

o incluso sin que sea obvio que se está llamando el método estático: (. Personalmente me quedo con la mayor claridad, aunque)

if (Equals(left, right)) 

El estática object.Equals método no tiene una documentación terriblemente buena, pero hace exactamente lo que quiere :)

+0

Tuve que mirar el ejemplo para estar seguro de que realmente hace lo que se quiere :-) – Joey

+0

Tengo curiosidad, ¿por qué el segundo ejemplo incluso compila? –

+4

@KendallFrey: No entiendo la pregunta. ¿Por qué crees que debería * no * compilar? –

Cuestiones relacionadas