Comment mettre tous les bits de l'enum drapeau
Je me demande une méthode générique pour la configuration de tous les bits de enum
drapeau à 1.
J'aimerais juste avoir un enum
qui renvoie pour toutes les comparaisons, indépendamment des autres énumérations.
Et ce code fonctionne;
[Flags]
public enum SomeRightEnum : uint
{
CanDoNothing = 0,
CanDoSomething = 1 << 0,
CanDoSomethingElse = 1 << 1,
CanDoYetAnotherThing = 1 << 2,
...
DoEverything = 0xFFFFFFFF
}
Mais dans le code ci-dessus, car il est uint nous avons fixé le nombre de "F"s, ça ne marcherait pas si c'était int
.
Donc je vais apprécier d'une façon générique de l'établissement de tous les bits de enum
drapeau à 1, quel que soit le type de données (i
nt, int64
, uint
etc)
- Hmmm. L'intention des énumérations est de décrire les options mutuellement exclusives. Vous semblez être de les utiliser comme raccourci pour un tas de masques de bits.
- Vous êtes à l'aide de la [Drapeaux] l'attribut dans l'enum droit?
- L' [Drapeaux] attribut sur l'enum est conçu à cet effet.
- Blanc: L'attribut Flags est purement esthétique, vous POUVEZ utiliser des "drapeaux" sans elle.
- bien sûr, j'ai édité, juste oublièrent de le copier
- ideone.com/qkc8b
- Le
ToString
représentation de la cosmétique. La sémantique et les comportements est identique avec ou sans leFlags
attribut.
Vous devez vous connecter pour publier un commentaire.
Plus simple est probablement:
Non signés, en fonction enum:
unchecked((uint)~0)
-1
option. J'ai été en utilisant un enum pour garder une trace des tâches ont été demandées et la suppression de l'indicateur lorsque la tâche a été achevée. Mon plan était d'utiliser le résultat comme le code de sortie. Donc, ce qui contribue à la maintenance des tâches enum.All = ~(~0 << 4)
parce que c'est un peu plus clair. Pas tout le monde sait que-1
est tout1
s.None
ne devrait pas être-1
?!Était-ce ce que vous vouliez?
~0
n'est pas assez bon que vous ne pouvez pas tester pour elle. La combinaison de toutes les options n'est pas égal à ~0.Au cas où quelqu'un se demande:
J'avais besoin de faire le même bâtiment un Bindable enumconverter pour WPF.
Car je ne sais pas ce que les valeurs moyennes dans la Réflexion, j'ai besoin d'manuellement été en mesure de changer les valeurs (les liant à une case à cocher p.e.)
Il y a un problème de réglage de la valeur d'un Pavillon enum à -1 pour définir tous les bits.
Si vous le réglez à -1, et vous démarquer de toutes les valeurs, il ne sera pas le résultat en 0 car tous les bits non utilisés ne sont pas décochée.
C'est le wat qui a le mieux fonctionné pour ma situation.
Ou si vous voulez une méthode d'extension:
AllFlags
qui s'étend de laenum
système de classe. ensuite, il pourrait être utilisé parfaitementenum.AllFlags(typeof(MyEnum))
pas ?