2012-10-20 4 views
16

Per esempio. Ho il seguente enumCome verificare se un enum bit a bit contiene valori da un altro enum bit a bit in C#?

[Flags] 
public enum Stuff 
{ 
    stuff1=1, 
    stuff2=2, 
    stuff3=4, 
    stuff4=8 
} 

Così mystuff mi sono messo a

mystuff = Stuff.stuff1|Stuff.stuff2; 

poi ho impostato hisstuff a

hisstuff = Stuff.stuff2|Stuff.stuff3; 

Come faccio a testare se questi si sovrappongono hisstuff -cioè e mystuff sia contenere almeno uno degli stessi valori di enumerazione?

E anche se ci sono più modi per farlo che è il più efficiente? (Questo è per un gioco)

risposta

17

Semplice:

if((x & y) != 0) {...} 

Questo fa un bit a bit "e", quindi i test per ogni incrocio.

+0

grazie mille. funziona perfettamente – coolblue2000

11

per ottenere i valori impostati in entrambi i valori, si utilizza l'operatore e (&):

mystuff & hisstuff 

Questo vi dà un nuovo valore con solo i valori sovrapposti, nel tuo esempio solo Stuff.stuff2. Per verificare se uno qualsiasi dei valori si sovrappone, si controlla se è diverso da zero:

if ((mystuff & hisstuff) != 0) ...