Чтобы проверить, установлен ли, например, AB, я могу сделать это:
if ((letter & Letters.AB) == Letters.AB)
Есть ли более простой способ проверить, установлены ли какие-либо флаги объединенной постоянной флага, чем следующие?
Это проверяет, что и A и B установлены, и игнорирует, установлены ли какие-либо другие флаги.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Это проверяет, установлен ли A или B, и игнорирует, установлены ли какие-либо другие флаги или нет.
Это может быть упрощено до:
if(letter & Letters.AB)
Вот C для бинарных операций; должно быть просто применить это к 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));
Кстати, именование переменной в примере вопроса - это единственное «письмо», что может означать, что оно представляет только одну букву; код примера проясняет, что это набор возможных букв и что допускается несколько значений, поэтому рассмотрите возможность переименования переменной 'letters'.