Um zu überprüfen, ob zum Beispiel AB eingestellt ist, kann ich Folgendes tun:
if ((letter & Letters.AB) == Letters.AB)
Gibt es eine einfachere Möglichkeit zu überprüfen, ob eines der Flags einer kombinierten Flag-Konstante gesetzt ist als die folgenden?
Dies prüft, ob sowohl A als auch B gesetzt sind, und ignoriert, ob andere Flags gesetzt sind.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Dies überprüft, ob entweder A oder B gesetzt ist, und ignoriert, ob andere Flags gesetzt sind oder nicht.
Dies kann vereinfacht werden zu:
if(letter & Letters.AB)
Hier ist das C für binäre Operationen; Es sollte einfach sein, dies auf C # anzuwenden:
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));
Übrigens ist die Benennung der Variablen im Beispiel der Frage der singuläre "Buchstabe", was bedeuten könnte, dass sie nur einen einzelnen Buchstaben darstellt; Der Beispielcode macht deutlich, dass es sich um eine Reihe möglicher Buchstaben handelt und dass mehrere Werte zulässig sind. Erwägen Sie daher, die Variable 'Buchstaben' umzubenennen.