en C #, les drapeaux d'enum doivent-ils être séquentiels? Ou pouvez-vous laisser des lacunes? et toujours effectuer des comparaisons bit-sage? IE, pouvez-vous faire ce qui suit:
[Flags] public enum MyEnum { None = 0, IsStarred = 1, IsDone = 128 }
8 Réponses :
Il n'y a rien qui les oblige à être séquentiel. P>
Votre définition Enum va bien et compilera sans problème. P>
La question de la lisibilité et le principe du moindre étonnement, ont cependant été grandement compromis ... p>
pas de telles exigences. Ce que vous avez, c'est bien, en supposant que vous capitalisez [indicateurs] code>. P>
Oui, vous pouvez le faire. C'est à vous de décider. P>
Ils ne doivent pas être séquentiels. P>
Non, ils ne doivent pas être séquentiels. Compilez votre code et voyez-le pour vous-même p>
Il n'y a rien de mal avec le code que vous avez affiché. Ceci est absolument fine: est-ce: p> rappelez-vous juste que le flagsattribute code> ne fait pas Appliquez vos valeurs pour être des masques de bits. p> p>
En fait, rien ne vous empêche d'attribuer une valeur d'énorme non définie (en tant qu'oeur entier) à une variable ENUM.
Et vous pouvez toujours effectuer des opérations bit-sage sur eux aucun problème non?
Vous pouvez non seulement faire cela, mais vous pouvez également faire cela:
public enum MyEnum { None = 5, IsStarred, IsDone = 128 }
Squental Enums n'a pas besoin d'avoir l'attribut Flags. Mais c'est une meilleure pratique. Vous pouvez lire plus ici: http://msdn.microsoft.com/en-us /Library/ms229062.aspx P>
Qu'est-ce que votre compilateur vous dit?