Pour vérifier si, par exemple, AB est défini, je peux le faire:
if ((letter & Letters.AB) == Letters.AB)
Existe-t-il un moyen plus simple de vérifier si l'un des indicateurs d'une constante d'indicateur combiné est défini que le suivant?
Cela vérifie que les deux A et B sont définis, et ne tient pas si d'autres drapeaux sont ensemble.
if((letter & Letters.A) == Letters.A || (letter & Letters.B) == Letters.B)
Cela vérifie que soit A ou B est définie, et ne tient pas si d'autres indicateurs sont définis ou non.
Cela peut être simplifié en:
if(letter & Letters.AB)
Voici le C pour les opérations binaires; il devrait être simple de l'appliquer à 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));
Incidemment, la dénomination de la variable dans l'exemple de la question est la «lettre» singulière, ce qui pourrait impliquer qu'elle ne représente qu'une seule lettre; L'exemple de code indique clairement qu'il s'agit d'un ensemble de lettres possibles et que plusieurs valeurs sont autorisées, alors pensez à renommer la variable «lettres».