Aby sprawdzić, czy na przykład ustawiono AB, mogę to zrobić:
if ((letter & Letters.AB) == Letters.AB)
Czy istnieje prostszy sposób sprawdzenia, czy któraś z flag połączonej stałej flagi jest ustawiona niż poniższe?
Sprawdza, czy ustawione są zarówno A, jak i B, i ignoruje, czy są ustawione inne flagi.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
To sprawdza, czy jest zbiór A lub B i ignoruje, czy jakiekolwiek inne flagi są ustawione czy nie.
Można to uprościć, aby:
if(letter & Letters.AB)
Oto C dla operacji binarnych; powinno być proste zastosowanie tego do 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));
Nawiasem mówiąc, nazewnictwo zmiennej w przykładzie pytania to pojedyncza „litera”, co może sugerować, że reprezentuje ona tylko jedną literę; przykładowy kod jasno pokazuje, że jest to zestaw możliwych liter i dozwolonych jest wiele wartości, więc rozważ zmianę nazwy zmiennej „litery”.