2012-12-31 9 views
10

Ho quattro variabili bool, dicono:verifica se quattro variabili booleane hanno lo stesso valore, non ovvio?

bool a=true; 
bool b=false; 
bool c=true; 
bool d=false; 

allora voglio controllare che quei quattro sono uguali. Però;

Console.WriteLine(true == false == true == false); 
true 

Perché succede questo? Penso che sia a causa di ordine evalution di un'equazione, che va da sinistra a destra:

((true == false) == true) == false 
(false == true) == false 
false == false 
true 

allora che cosa è un modo corretto per verificare se tutte le N> 2 variabili booleane sono uguali?

+1

Il tuo presupposto è corretto. Se lo stesso operatore viene utilizzato in un'espressione ... la precedenza dell'operatore non significa nulla .. sono tutti uguali .. –

risposta

7
if(a==b && a==c && a==d) 

Se si dispone di numero variabile di Caccio non solo 4

var bools = new bool[] { a, b, c, d }; 
var areAllEqual = bools.Skip(1).All(b=>b==bools[0]); 
+1

+1 oops, hai già menzionato l'array (puoi usare anche un anziché al posto di bool [0] dal momento che hai già il valore) – V4Vendetta

2

Immagino che potresti aggiungere metterli in un array e il n utilizzare l'All operatore

yourboolarray.All(x=>x == a) // compare with any a,b,c,d 
1

si potrebbe considerare l'utilizzo di metodi bit a bit per questo

dove dalla rappresentazione intera del bools sarebbe uguale 0 o 15 (o qualsiasi valore a seconda del numero di bit)

potrebbe richiedere un po 'di ristrutturazione del codice se

+0

Cosa? No. Se hai intenzione di convertirli in int, puoi anche contarli. Ma in realtà, i valori dovrebbero essere lasciati nei loro tipi 'naturali', non espressi in questo modo. –

Problemi correlati