Para verificar si, por ejemplo, AB está configurado, puedo hacer esto:
if ((letter & Letters.AB) == Letters.AB)
¿Hay alguna manera más simple de verificar si alguna de las banderas de una constante de bandera combinada está establecida que la siguiente?
Esto verifica que tanto A como B estén configurados, e ignora si hay otros indicadores configurados.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Esto comprueba que o bien se fija A o B, e ignora si otros banderas se establecen o no.
Esto se puede simplificar para:
if(letter & Letters.AB)
Aquí está la C para operaciones binarias; debería ser sencillo aplicar esto a C #:
enum {
A = 1,
B = 2,
C = 4,
AB = A | B,
All = AB | C,
};
int flags = A|C;
bool anything_and_a = flags & A;
bool only_a = (flags == A);
bool a_and_or_c_and_anything_else = flags & (A|C);
bool both_ac_and_anything_else = (flags & (A|C)) == (A|C);
bool only_a_and_c = (flags == (A|C));
Por cierto, el nombre de la variable en el ejemplo de la pregunta es la 'letra' singular, lo que podría implicar que representa solo una letra; el código de ejemplo deja en claro que es un conjunto de letras posibles y que se permiten múltiples valores, así que considere renombrar la variable 'letras'.