9
votes

Qu'est-ce qu'aucun = 1 se réfère dans la classe Enum suivante?

J'ai remarqué la déclaration d'énumération suivante tout en parcourant un exemple de code. Ce qui n'en est pas = 1 signifie?

public enum ButtonActions
{
    None = 1,        
    Clear,
    Insert,       
    Delete,
    Cancel,
    Close
}


2 commentaires

Un très mauvais énum, ​​causer zéro est indéfini mais peut être créé facilement: var invalide = par défaut (Buttonactions);


@Oliver Ce n'est pas indéfini, il ne dispose que d'un nom. En général, vous ne pouvez pas déjà assumer quoi que ce soit sur la valeur d'ENUM, rien n'empêche un Enum e {a, b, c} de détenir une valeur de 3.


4 Réponses :


35
votes

Il marque la valeur de Aucun , que toutes les valeurs suivantes comptent implicitement vers le haut à partir de:

Effacer sera 2
insérer sera de 3
...

normalement, sans marqueur, Enum S Défaut à commencer à 0 et à compter vers le haut.

côté Note: Vous pouvez toujours spécifier un nouveau "Démarrer" à tout moment et la commande redémarre. Par exemple: xxx

maintenant, ce sera le suivant:

Aucun : 1
Effacer : 2
Insérer : 3
Supprimer : 7
Annuler : 8
Fermer : 9

in c #, Enum S est fortement saisi des ensembles de constantes nommées pour Types intégrés sous-jacents . Même s'ils sont leurs propres types avec leurs propres méthodes, sous les rideaux, tout simplement des chiffres. Lorsque vous comparez un Enum à un autre, il est plus ou moins une comparaison intégrale.

Ils sont conçus de manière à ce qu'il ne soit pas absolument nécessaire savoir ou se soucier du nombre réel que les constantes nommées représentent - c'est en fait pourquoi elles existent du tout, de sorte que vous n'écrivez pas 3 et 5 dans votre code partout. Mais cela ne change pas le fait que chacun nommé carte constante à un nombre, finalement , et donc dans de nombreux cas, il est agréable d'avoir ce degré de contrôle précisément ce que nombres qu'ils représentent chacun.


2 commentaires

Pourriez-vous s'il vous plaît expliquer pourquoi utilisons-nous ces chiffres ..? Parce que lorsque vous utilisez Enums, je comparais généralement la valeur avec une valeur ENUM.


@Sravan parce que parfois la valeur que représente une énumération est importante - par exemple Protocoles de réseau.



0
votes

Habituellement, lorsque vous faites Enum , ils sont représentés comme int à partir de 0.

Je ne suis pas absolument sûr, mais peut-être de cette manière que l'énumération commencera à partir de 1. Vous pouvez l'essayer simplement "si ( aucun == 1 )" et vérifiez la valeur de retour.

Comme je l'ai dit que je ne suis pas sûr à 100%, mais vous pouvez l'essayer.


0 commentaires

5
votes

de msdn ;

Par défaut, le type sous-jacent de chaque élément de l'énum est int .

Les suivants sont des avantages de l'utilisation d'une énumération au lieu d'un numérique Type:

  • Vous spécifiez clairement pour le code client Quelles valeurs sont valides pour la variable.

  • dans Visual Studio, IntelliSense répertorie les valeurs définies.

    Lorsque vous ne spécifiez pas de valeurs pour les éléments de l'énumérateur Liste, les valeurs sont automatiquement incrémentées par 1 . Lorsque vous créez une énumération, sélectionnez la valeur par défaut la plus logique et donnez-lui une valeur de zéro. Cela fera que toutes les énumes aient cette valeur par défaut si elles ne sont pas explicitement attribuées de valeur lorsqu'elles sont créées.

    Je crois que l'une des parties la plus importante est la raison pour laquelle nous utilisons ces valeurs est drapeaux bits . Utilisation avec flagsattribute vous Peut utiliser des opérations bitwiswwise comme et , ou , pas et xor sur vos éléments énumeurs. Exemple de msdn page; < / p> xxx


0 commentaires

0
votes

Cela signifie simplement que vous pouvez vous reporter à celui utilisant

ButtonActions bt = (ButtonActions)1;


0 commentaires