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.
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.
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.)
In questo caso: || controlla solo la condizione del lato destro se il lato sinistro è falso? Poiché TRUE O ANYTHING è sempre VERO? – ParmesanCodice
Solo una cosa secondaria - ci sono naturalmente più operatori booleani di quello, forse riformulati in "due operatori logici booleani/logici". – sharkin
Bene, ho fino a -2 per la digitazione mentre dormo. :) –
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true)
{ // Do stuff here
}
proprio come in C e C++, l'operatore booleano OR è ||
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true)
{
// Do stuff here
}
O è ||
in C#.
Si può dare un'occhiata a this.
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.
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
Questo è un buon punto. Se le proprietà hanno effetti collaterali (che è anche un design molto cattivo) si applica lo stesso avvertimento. – Josh
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;)
Per essere chiari, "o" è un operatore e non una dichiarazione. – JoshJordan
@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. –
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