Щоб перевірити, чи встановлено, наприклад, AB, я можу це зробити:
якщо ((лист та букви.АБ) == Букви.АБ)
Чи є більш простий спосіб перевірити, чи встановлений будь-який з прапорів комбінованої константи прапора, ніж наступний?
Це перевіряє, що встановлені і A, і B, і ігнорує, чи встановлені будь-які інші прапори.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Це перевіряє, чи встановлено або A, або B, і ігнорує, встановлені чи ні інші прапори.
Це можна спростити до:
if(letter & Letters.AB)
Ось С для бінарних операцій; слід застосувати це до 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));
Між іншим, найменування змінної у прикладі запитання є одниною "буква", що може означати, що вона являє собою лише одну букву; у прикладі коду стає зрозумілим, що його набір можливих літер і що дозволяється декілька значень, тому розгляньте можливість перейменування змінної "літери".