2012-06-13 13 views
32

RozważmyWyłączenie flagi enum

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

Mam State someState i jeśli niektóre wyrażenia jest true, chcę rozbroić IsCool banderą someStateniezależnie IT są już ustawione lub wyłączony. Oznacza to, że naprawdę nie mogę używać someState ^= State.IsCool, ale co mogę zamiast tego użyć?

Odpowiedz

74

Musisz podejść do tego w odwrotny sposób niż przy ustawianiu flagi: bitowo ORAZ w bieżącym stanie z dopełnieniem flagi, którą chcesz usunąć.

someState &= ~State.IsCool; 
+2

Użyłem XOR (warunkowo) przez najdłuższy czas, aż usiadłem, wypisałem kilka tabel prawdy i odkryłem podejście NIE. O wiele łatwiej! –

+1

Piękny. Nie znałem operatora '~'. – kasperhj