2012-10-12 125 views
6

He leído que el operador Y && en .NET evalúa condicionalmente su segundo argumento.operador C# AND con comprobación nula

¿Es seguro comprobar si hay nulo y luego verificar algún campo dentro de una sola declaración?

Por ejemplo, imaginemos que tenemos un SomeClass clase, que tiene un ID de campo entero:

class SomeClass 
{ 
    public Int32 Id { get; set; } 
} 

Entonces, recibimos un objeto de este tipo en algún lugar y tratamos de realizar algunas acciones en él:

public void SomeMethod(SomeClass obj) 
{ 
    if (obj != null) 
     if (obj.Id == 1) 
     { 
     // do some actions 
     } 
} 

¿Podemos reescribir esto de la siguiente manera para reducir la cantidad de código? ¿Será seguro el cheque nulo?

public void SomeMethod(SomeClass obj) 
{ 
    if (obj != null && obj.Id == 1) 
     // do some actions 
} 

Respuesta

7

Sí, va a ser seguro, & & condiciones se tratan de "izquierda a derecha", si la primera no coincide en su caso, el segundo no será evaluado

msdn

la operación

x & & y

corresponde a la o peración

x & y

excepto que si x es falsa, y no se evalúa, porque el resultado de la operación AND es falso, no importa lo que el valor de y es. Esto es conocido como evaluación de "cortocircuito".

3

Sí, eso es absolutamente seguro hacerlo.

Como dice en su pregunta, si el objeto es nulo, solo se evalúa la primera condición, por lo que la segunda condición (que generaría una NullReferenceException) nunca se ejecuta. Esto también se conoce como evaluación de "cortocircuito".

1

Sí ... Esto es seguro en C# y en muchos otros idiomas. Si el programa sabe que las siguientes comprobaciones no pueden hacer que toda la declaración if se haga realidad, no hay necesidad de mirarlas.

Este tipo de evaluación se llama Lazy Evaluation.

1

El término aquí es "short-circuit". Con y (&&) operador, si la primera condición falla, no continuará con la siguiente condición. La forma en que lo haces no es solo salvar, sino la forma correcta de hacerlo.

7.11 Conditional logical operators - C# Reference MSDN

El & & y || los operadores se llaman operadores lógicos condicionales. También se denominan operadores lógicos de "cortocircuito".

1

sí, eso es simple lógica, si entre varios y statments, una es falsa, no hay necesidad de mantener evaluación de las mismas ya que el resultado será falsa, por lo que el compilador se detiene la evaluación cuando el primer FALSO se encuentra