2012-06-13 17 views
32

BetrachtenEntschärfen eine Enumeration Flag

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

ich eine State someState haben und wenn einige Ausdruck true ergibt, möchte ich die IsCool Flagge someStateunabhängig davon bereits eingestellt ist unscharf zu schalten oder nicht gesetzt. Dies bedeutet, dass ich someState ^= State.IsCool nicht wirklich verwenden kann, aber was kann ich stattdessen verwenden?

Antwort

74

Sie müssen dies in umgekehrter Richtung als beim Setzen eines Flags erreichen: bitweise und den aktuellen Zustand mit dem Komplement des Flags, das Sie entfernen möchten.

someState &= ~State.IsCool; 
+2

Ich verwendete XOR (bedingt) für die längste Zeit, bis ich mich setzte, schrieb einige Wahrheitstabellen aus und entdeckte den AND NOT Ansatz. So viel einfacher! –

+1

Schön. Ich kannte den Operator "~" nicht. – kasperhj