En utilisant des opérateurs au niveau du Bit sur les drapeaux
J'ai quatre drapeaux
Current = 0x1
Past = 0x2
Future = 0x4
All = 0x7
Dire que j'ai reçu les deux drapeaux Passé et de l'Avenir (setFlags(PAST | FUTURE)
). Comment puis-je savoir si Past
est en elle? De même, comment puis-je dire que Current
n'est pas elle? De cette façon, je n'ai pas à tester toutes les combinaisons possibles.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez tous les bits dans le masque de test de match:
Si vous voulez quelque peu unique dans le test de masque de match:
La différence est plus apparente lorsque l'on analyse une valeur pour plusieurs choses.
Pour tester l'exclusion:
Tout d'abord - utiliser les énumérations avec FlagAttribute. C'est ce qu'il est.
Test est alors fait comme ceci:
Ou ceci:
Ce dernier fonctionnera mieux si "le Passé" est une combinaison de drapeaux et vous avez voulu les tester tous.
Est comme ceci:
La suppression est comme ceci:
PastOrPresent=3
parce que1 & 2 = 3
. Il n'a de sens que pour ajouter ces pour des combinaisons qui sont souvent utilisés ensemble. Il enregistre de frappe et évite les erreurs.1 | 2 = 3
. 🙂Vous pouvez également ajouter un méthode d'extension comme ce
alors vous pouvez faire:
Si vous utilisez .NET 4 ou plus tard, je préfère pour ce faire, l'assainissement de l'imao:
Un addendum à Marc Gravel et Vilx-'s réponse:
Votre marqués enum ne devrait pas indiquer le montant pour "Tous", il faut juste comprendre vos valeurs existantes. Cela vaut pour toutes les valeurs calculées.
Noter que Vilx - suppression de l'utilisation de l'Hexadécimal pour les valeurs. Ceci est important car une fois que vous êtes passé 0x8, vos valeurs sont à respecter Hex. Vous devez simplement rester en décimal.
EDIT:
Je tiens également à ajouter que vous pouvez utiliser le décalage de bits plutôt que hexadécimal/décimal.
Cela ressemble à:
vous pouvez utiliser ET sur et vérifier si le résultat est le même que vous et avec?