Para verificar se, por exemplo, AB está definido, posso fazer o seguinte:
if ((letter & Letters.AB) == Letters.AB)
Existe uma maneira mais simples de verificar se algum dos sinalizadores de uma constante de sinalizador combinado está definido como o seguinte?
Isso verifica que ambos A e B são definidas e ignora se qualquer outras bandeiras são set.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Isso verifica se A ou B está definido e ignora se outros sinalizadores estão definidos ou não.
Isso pode ser simplificado para:
if(letter & Letters.AB)
Aqui está o C para operações binárias; deve ser simples aplicá-lo ao 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));
Aliás, a nomeação da variável no exemplo da pergunta é a singular 'letra', o que pode implicar que ela represente apenas uma única letra; o código de exemplo deixa claro que é um conjunto de letras possíveis e que vários valores são permitidos; portanto, considere renomear a variável 'letters'.