7
votes

Les drapeaux C # Enum doivent-ils être séquentiels

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
}


1 commentaires

Qu'est-ce que votre compilateur vous dit?


8 Réponses :


7
votes

Il n'y a rien qui les oblige à être séquentiel.

Votre définition Enum va bien et compilera sans problème.

La question de la lisibilité et le principe du moindre étonnement, ont cependant été grandement compromis ...


0 commentaires

4
votes

pas de telles exigences. Ce que vous avez, c'est bien, en supposant que vous capitalisez [indicateurs] .


0 commentaires

3
votes

Oui, vous pouvez le faire. C'est à vous de décider.


0 commentaires

4
votes

Ils ne doivent pas être séquentiels.


0 commentaires

1
votes

Non, ils ne doivent pas être séquentiels. Compilez votre code et voyez-le pour vous-même


0 commentaires

5
votes

Il n'y a rien de mal avec le code que vous avez affiché. Ceci est absolument fine: xxx

est-ce: xxx

rappelez-vous juste que le flagsattribute ne fait pas Appliquez vos valeurs pour être des masques de bits.


2 commentaires

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?



1
votes

Vous pouvez non seulement faire cela, mais vous pouvez également faire cela:

public enum MyEnum
{
    None = 5,
    IsStarred,
    IsDone = 128
}


0 commentaires

0
votes

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


0 commentaires