2009-11-17 17 views
15

¿Hay un operador or en C#?C# 'o' operador?

que quiero hacer:

if (ActionsLogWriter.Close or ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 

pero no estoy seguro de cómo podría hacer algo así.

+0

Para que quede claro "o" es un operador y no una afirmación. – JoshJordan

+20

@lndebi: Sus preguntas revelan una comprensión sorprendentemente desigual de C#. Considere revisar algunos tutoriales para equilibrarse antes de marcar a los administradores de paquetes y cualquier otra cosa en la que esté trabajando. msdn.microsoft.com/en-us/library/... es un lugar para comenzar. –

+0

Sin mencionar que, para empezar, tienes una declaración extraña. ¿Por qué solo eres explícito acerca de que la 2ª condición sea verdadera e implícita con la primera? – mpen

Respuesta

67

C# admite dos operadores booleanos or: la única barra | y la barra doble ||.

La diferencia es que | siempre comprueba las condiciones izquierda y derecha, mientras que || solo comprueba la condición del lado derecho si es necesario (si el lado izquierdo es falso).

Esto es significativo cuando la condición en el lado derecho implica el procesamiento o resulta en efectos secundarios. (Por ejemplo, si su método ErrorDumpWriter.Close tardó un tiempo en completarse o cambió el estado de algo.)

+0

Debe decir: || solo verifica la condición del lado derecho si el lado izquierdo se evalúa como falso ¿Desde VERDADERO O CUALQUIER COSA siempre es VERDADERO? – ParmesanCodice

+0

Simplemente una cosa menor: por supuesto hay más operadores booleanos que eso, tal vez reformule a "dos operadores OR booleanos/lógicos". – sharkin

+0

Muy bien, tengo hasta -2 para escribir mientras tengo sueño. :) –

4
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true) 
{ // Do stuff here 
} 
1

al igual que en C y C++, el operador booleano O es ||

if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 
2

O es || en C#.

Puede echar un vistazo a this.

6

También vale la pena mencionar que, en C#, el operador O está en cortocircuito. En su ejemplo, Cerca parece ser una propiedad, pero si se tratara de un método, vale la pena señalar que:

if (ActionsLogWriter.Close() || ErrorDumpWriter.Close()) 

es fundamentalmente diferente de

if (ErrorDumpWriter.Close() || ActionsLogWriter.Close()) 

En C#, si la primera expresión devuelve verdadero , la segunda expresión no se evaluará en absoluto. Solo ten en cuenta esto. Realmente funciona a su favor la mayor parte del tiempo.

+1

¿Importa si es una propiedad o un método? En este contexto, supongo que el código de propiedad se llama tan bien como para los métodos. – sharkin

+0

Ese es un buen punto. Si las propiedades tienen efectos secundarios (que también es un diseño muy malo), se aplica la misma advertencia. – Josh

1

El operador "|" evaluará ambos lados de la expresión.

if (ActionsLogWriter.Close | ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 

La doble operador "||" sólo se evaluará el lado izquierdo si la expresión devuelve cierto.

if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 

C# tiene muchas similitudes con C++ pero su todavía son las diferencias entre las dos lenguas;)