usa switch quedar puede modificador lenguaje instrucción instruccion fuera etiqueta else ejemplos control condiciones como comandos caso c# .net conditional logical-operators short-circuiting

switch - Orden de ejecución de condiciones en C#Si declaración



instrucción switch (8)

Hay dos instrucciones if a continuación que tienen múltiples condiciones utilizando operadores lógicos. Lógicamente ambos son iguales pero el orden de verificación difiere. El primero funciona y el segundo falla.

Me referí a MSDN para verificar si el orden de ejecución de las condiciones definidas; Pero no pude encontrar.

Considere una condición de verificación múltiple que tiene && como el operador lógico. ¿Se garantiza que siempre comprobará la primera condición y, si no se cumple, la segunda condición no se verificará?

Solía ​​usar el enfoque 1 y funciona bien. Buscando una referencia de MSDN que justifique el uso.

ACTUALIZAR

Consulte la evaluación de "cortocircuito"

CÓDIGO

List<string> employees = null; if (employees != null && employees.Count > 0) { string theEmployee = employees[0]; } if (employees.Count > 0 && employees != null) { string theEmployee = employees[0]; }


¿Se garantiza que siempre comprobará la primera condición y, si no se cumple, la segunda condición no se verificará?

La respuesta corta es sí.


Consulte, por ejemplo, esta página de MSDN para && que describe la evaluación de cortocircuito.

Puede verificar o probar la secuencia de ejecución de esta manera:

int i; bool b; b=((i=3)==0 && (i=4)!=0); Console.WriteLine(i); b=((i=3)!=0 || (i=4)!=0); Console.WriteLine(i);

Obtiene 3 en ambos casos, lo que demuestra que en ambos casos se produce el comportamiento de cortocircuito. Por otro lado, puede usar el operador lógico ''&'' o ''|'', respectivamente, para evitarlo. Así obtendrás un resultado de 4, porque ambas condiciones han sido evaluadas.


De izquierda a derecha, mientras que la expresión sigue siendo cuestionable.


Deberías usar:

if (employees != null && employees.Count > 0) { string theEmployee = employees[0]; }

&& cortocircuitos y employees.Count . El recuento no se ejecutará si los employees son null .

En su segundo ejemplo, la aplicación lanzará una excepción si los employees son null cuando intenta Count los elementos de la colección.

this


El && y || Operadores de cortocircuito. Es decir:

1) Si && evalúa su primer operando como falso, no evalúa su segundo operando.

2) Si || evalúa su primer operando como verdadero, no evalúa su segundo operando.

Esto le permite hacer una comprobación nula y hacer algo con el objeto, como si no fuera nulo, el segundo operando no se evalúa.


El && y || los operadores se utilizan a menudo para comprobar las condiciones del objeto.

1) La condición "&&" evalúa su primer operando como falso, no evalúa su segundo operando. Si devuelve true, se evalúa la segunda condición. Si la segunda condición es verdadera, entonces solo se devolverá verdadera. Se puede utilizar &&& para asegurarse de que todas las condiciones se cumplen como válidas.

2) El "||" condición evalúa su primer operando como verdadero, no evalúa su segundo operando. Si la primera condición se evalúa como falsa, solo se evaluará a la segunda condición. Si está satisfecho, entonces devolverá verdadero. De lo contrario, falso.


El operador Y condicional (&&) realiza un AND lógico de sus operandos bool, pero solo evalúa su segundo operando si es necesario.


Las condiciones se verifican de izquierda a derecha. El operador && solo evaluará la condición correcta si la condición izquierda es verdadera.

La sección 5.3.3.24 de la Especificación de lenguaje C # establece:

5.3.3.24 && expresiones

Para una expresión expr del formulario expr-first && expr-second :

· El estado de asignación definido de v antes de expr-first es el mismo que el estado de asignación definido de v antes de expr.

· El estado de asignación definido de v antes de expr-second se asigna definitivamente si el estado de v después de expr-first se asigna definitivamente o "definitivamente se asigna después de la expresión verdadera". De lo contrario, no se asigna definitivamente.

· El estado de asignación definido de v después de expr está determinado por:

o Si el estado de v después de expr-first se asigna definitivamente, entonces el estado de v después de expr se asigna definitivamente.

o De lo contrario, si el estado de v después de expr-second se asigna definitivamente, y el estado de v después de expr-first se “asigna definitivamente después de una expresión falsa”, entonces el estado de v después de expr se asigna definitivamente.

o De lo contrario, si el estado de v después de expr-second se asigna definitivamente o "definitivamente se asigna después de la expresión verdadera", entonces el estado de v después de expr se "asigna definitivamente después de la expresión verdadera".

o De lo contrario, si el estado de v después de expr-first se “asigna definitivamente después de una expresión falsa”, y el estado de v después de expr-second se “asigna definitivamente después de una expresión falsa”, entonces el estado de v después de expr se “asigna definitivamente después de falsa expresión ".

o De lo contrario, el estado de v después de expr no se asigna definitivamente.

Así que esto deja claro que expr-first siempre se evalúa y si es verdadero, y solo entonces, también se evalúa expr-second .