2009-11-17 18 views
15

Esiste un operatore or in C#?C# 'o' operatore?

che voglio fare:

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

ma non sono sicuro di come avrei potuto fare qualcosa di simile.

+0

Per essere chiari, "o" è un operatore e non una dichiarazione. – JoshJordan

+20

@lndebi: Le tue domande rivelano una presa straordinariamente irregolare di C#. Prendi in considerazione alcuni tutorial per bilanciare te stesso prima di affrontare i gestori di pacchetti e qualsiasi altra cosa stai lavorando. msdn.microsoft.com/en-us/library/... è un punto di partenza. –

+0

Per non parlare di una dichiarazione strana se per cominciare. Perché sei solo esplicito riguardo al fatto che la seconda condizione sia vera e implicita con la prima? – mpen

risposta

67

C# supporta due operatori booleani or: la barra singola | e la barra doppia ||.

La differenza è che | controlla sempre entrambe le condizioni sinistra e destra, mentre || controlla solo la condizione del lato destro se è necessario (se la parte sinistra restituisce false).

Ciò è significativo quando la condizione sul lato destro comporta l'elaborazione o produce effetti collaterali. (Ad esempio, se il tuo metodo ErrorDumpWriter.Close ha richiesto un po 'di tempo per completare o modificare lo stato di qualcosa.)

+0

In questo caso: || controlla solo la condizione del lato destro se il lato sinistro è falso? Poiché TRUE O ANYTHING è sempre VERO? – ParmesanCodice

+0

Solo una cosa secondaria - ci sono naturalmente più operatori booleani di quello, forse riformulati in "due operatori logici booleani/logici". – sharkin

+0

Bene, ho fino a -2 per la digitazione mentre dormo. :) –

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

proprio come in C e C++, l'operatore booleano OR è ||

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

O è || in C#.

Si può dare un'occhiata a this.

6

Vale anche la pena ricordare che in C# l'operatore OR è in cortocircuito. Nel tuo esempio, Vicino sembra essere una proprietà, ma se si trattasse di un metodo, vale la pena notare che:

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

è fondamentalmente diverso da

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

In C#, se la prima espressione restituisce true , la seconda espressione non verrà valutata affatto. Basta essere consapevoli di questo. Funziona davvero a tuo vantaggio la maggior parte del tempo.

+1

Ha importanza se si tratta di una proprietà o di un metodo? In questo contesto, direi che il codice di proprietà è chiamato altrettanto bene che per i metodi. – sharkin

+0

Questo è un buon punto. Se le proprietà hanno effetti collaterali (che è anche un design molto cattivo) si applica lo stesso avvertimento. – Josh

1

Il singolo operatore "|" valuterà entrambi i lati dell'espressione.

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

L'operatore doppio "||" valuterà solo il lato sinistro se l'espressione restituisce true.

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

C# ha molte somiglianze con C++, ma la loro ancora sono le differenze tra le due lingue;)