2012-06-13 20 views
32

ConsiderareDisinserimento una bandiera enum

[Flags] 
    public enum State 
    { 
     IsCool = 0x1, 
     SomethingElse = 0x2 
    } 

Ho un State someState e se qualche espressione restituisce true, voglio disinserire la bandiera IsCool di someStateindipendentemente di esso che è già impostato o meno. Ciò significa che non posso veramente usare someState ^= State.IsCool ma cosa posso usare invece?

risposta

74

È necessario avvicinarsi a questo modo inverso rispetto a quando si imposta un flag: bit AND lo stato corrente con il complemento del flag che si desidera rimuovere.

someState &= ~State.IsCool; 
+2

Ho usato XOR (condizionatamente) per il tempo più lungo, finché non mi sono seduto, ho scritto alcune tabelle di verità e ho scoperto l'approccio AND NOT. Molto più facile! –

+1

Bello. Non conoscevo l'operatore '~'. – kasperhj