2012-06-13 15 views
32

Consideredesarmado una bandera enumeración

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

Tengo un State someState y si alguna expresión se evalúa como verdadera, quiero desarmar el indicador de IsCoolsomeState independientemente de lo que ya está armado o desarmado. Esto significa que realmente no puedo usar someState ^= State.IsCool pero, ¿qué puedo usar en su lugar?

Respuesta

74

Debe acercarse a esto de forma inversa a la configuración de un indicador: en modo bit Y el estado actual con el complemento del indicador que desea eliminar.

someState &= ~State.IsCool; 
+2

Utilicé XOR (condicionalmente) durante más tiempo, hasta que me senté, escribí algunas tablas de verdad y descubrí el enfoque AND NOT. ¡Mucho más fácil! –

+1

Hermoso. No sabía el operador '~'. – kasperhj