2009-03-24 21 views
5

decir, por ejemplo que creo un pato¿Debo verificar si un objeto es nulo primero o segundo?

Duck myDuck = DuckFactory.CreateDuck(); 

En el pasado siempre he comprobar para ver si es nulo myDuck

if (myDuck == null) 
{ 
    // Do stuff 
} 

recientemente he mirado en algún código que comprobar NULL primero.

if (null == myDuck) 
{ 
    // Do stuff 
} 

Me parece que estos son los mismos, pero ¿hay alguna diferencia entre estos dos? ¿Hay algún beneficio de rendimiento para uno sobre el otro? ¿Existe una mejor práctica recomendada para verificar si un objeto es nulo?

+0

Dupie McDuperson: http://stackoverflow.com/questions/ 655657/0-variable-o-null-obj-an-outdated-practice-in-c/655670 # 655670 – Dana

+0

Dupes de al menos 3: http://askjonskeet.com/search/?q = error tipográfico + C% 2B% 2B –

+0

Traté de hacer mi diligencia debida, buscando un dup en esto. Para mí fue un concepto muy difícil verbalizar de manera concisa. De cualquier manera, gracias por las excelentes respuestas. – bendewey

Respuesta

16

El segundo deriva de C/C++ (y en otros lugares), donde esto es una construcción válido

if (myDuck = null) { 
} 

Eso no es válido en C# (a menos que su expresión se resuelve en un boolean). Por ejemplo, esto es válido C#

bool b = ... 
if (b = true) { 
} 

poniendo la primera constante era defensiva para detener la asignación accidental cuando se quería comparación. Yo diría que más personas colocan la variable a la izquierda, pero tampoco hay nada de malo en colocar la constante a la izquierda.

Solo elija una y sea consecuente al respecto.

+0

sí, donde "if (myDuck = null)" es una construcción válida Y puede causar GRANDES errores de programa difíciles de encontrar. – dustyburwell

+0

Nunca he visto ese error en mi código, tal vez fue algo importante en los años 80 –

+0

(O el código de cualquier persona) –

0

Creo que no hay diferencia alguna.

La instrucción if simplemente verificará si la expresión que contiene es verdadera o no. Wheter myDuck está a la izquierda de la derecha del símbolo == no hace diferencia.

1

La única diferencia se produce si tuviera que poner esto por casualidad:

if(myDuck = null) ... 

Pero en realidad, el compilador de C# es lo suficientemente inteligente como para detectar esto.

Si pones esto por casualidad:

if(null = myDuck) ... 

Entonces esto daría lugar a un error de vuelta en el C o C++ días.

Relativamente breve: no hace ninguna diferencia en C#.

0

Poner 'null' primero evita la asignación accidental si (myDuck = null). Sin embargo, algunos compiladores arrojan un error al intentar hacer eso, y por lo tanto, el punto es discutible. IMO todo se reduce al estilo: elija uno y quédese con él :)

0

Uno se parece a la sintaxis C++, y el otro a Java o C#.

Por lo que he leído, la "nula == myDuck" sintaxis se originó en C de la gente accidentalmente asignar en sus sentencias if

if (myDuck = null) 
    // returns true 
Cuestiones relacionadas