Si usted tiene un si-la instrucción en C# que comprueba varias condiciones:

if (a == 5 && b == 9) { ... }

Hace b == 9 todavía se comprueba si a == 5 condición es falsa, o lo hace de forma automática la salida ya que no hay manera de que esto podía pasar ya?

Del mismo modo, para una O si-estado:

if (a == 5 || b == 9) { ... }

Se b == 9 todavía se comprueba si a == 5 es cierto?

  • Lo sentimos, pero leer el manual. Esta es una pregunta que puede ser contestada por la documentación y por probarlo por ti mismo.
  • Justo lo suficiente. Supongo que no estaba seguro de cómo la palabra mi pregunta para un motor de búsqueda
  • usted está pidiendo la funcionalidad de los operadores. Así que la próxima vez que usted podría incluir este término en la búsqueda, f.e. «C# operador».

6 Comentarios

  1. 18

    Tanto && y || es «cortocircuito» de los operadores, lo que significa que si la respuesta es conocido desde la izquierda del operando, el operando derecho es que no se evalúan.

    Esto significa que:

    a && b

    b no será evaluado si a es falso, puesto que la respuesta final es que ya se sabe.

    Asimismo:

    a || b

    b no será evaluado si a es cierto, ya que la respuesta final es que ya se sabe.

    Si quiere ambos operandos para ser evaluado, el uso de la & y | operadores lugar.

    La ventaja de esto es que usted puede escribir expresiones que no tendría éxito si todos los operandos se evalúan. He aquí un típico si-estado:

    if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
        ... use a.SomeProperty.Inner

    Si es nulo, y la expresión a evaluar a.SomeProperty, se lanzaría una NullReferenceException, pero desde && corto-circuitos, si a es null, la expresión, no se evaluará el resto y por lo tanto no tirar la excepción.

    Obviamente, si reemplazar && con &, va a tirar esa excepción si a o a.SomeProperty es null.

  2. 2

    Conceptualmente, && y || corto-circuito.

    Pero ya que no tiene ningún efecto secundario allí, el compilador JIT es libre para eliminar el cortocircuito. No sé si es realmente así o no.

  3. 1

    Para : if (a == 5 && b == 9) { ... }

    Hace b == 9 todavía se comprobará si a == 5 condición es falsa, o no
    automáticamente la salida ya que no hay manera de que esto podía pasar ya?

    Si a == 5 es false no cualquier otro control será ejecutado en esa línea.

    Para: if (a == 5 || b == 9) { ... }

    Será b == 9 todavía se comprobará si a == 5 es cierto?

    Pasar al interior, de inmediato, como primera condición ya satisface los requisitos.

  4. 0

    Utilizando el operador and, de acuerdo a la lógica booleana, todas las condiciones deben ser evaluadas a la VERDAD. Si sólo uno de ellos no está satisfecho, el resultado de las condiciones será FALSA.

    Hace b == 9 todavía se comprobará si a == 5 condición es falsa, o no
    automáticamente la salida ya que no hay manera de que esto podía pasar ya?

    Lo hace automáticamente la salida, porque la primera condición es falsa y el resultado ya es conocido.

    Para el operador or, usted necesita que, al menos, una de las condiciones es VERDADERA y su lógica será ejecutado. Si el primero no está satisfecho, la aplicación comprueba el resto de condiciones.

    Será b == 9 todavía se comprobará si a == 5 es cierto?

    No, No va a ser revisado, porque la primera condición es TRUE y, a continuación, no es necesario para comprobar otra condición.

    • Quiero comprender la razón de esta downvote..
  5. 0

    Corto cirtuiting es definido por la norma. De lo contrario sería imposible decir cuál es el resultado de la expresión, tales como:

    if (a != null && a.IsValid) { ... }

    En algunos C# compiladores de que iba a funcionar bien, en otros, se haría una excepción. Es por eso que la norma está ahí para definir el comportamiento común.

    EDIT: se ha aclarado la última afirmación.

  6. -1

    in Y check
    a==5
    si es verdad, entonces
    va a ir a b==9 más
    no ir a b==9.
    O:
    se comprobará a==5 y b==9.

    • Hola user3119036 bienvenido a SA. tu respuesta está bien, pero necesita un poco de análisis de verificación de lo que hice.

Dejar respuesta

Please enter your comment!
Please enter your name here