たとえば AB が設定されているかどうかを確認するには、次のようにします。
if((文字 & 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));
ちなみに、質問の例の変数の名前は単数形の「文字」です。これは、それが単一の文字のみを表していることを意味する場合があります。サンプルコードは、可能な文字のセットであり、複数の値が許可されていることを明確に示しているため、変数「文字」の名前を変更することを検討してください。