'>

Les énumérations en C sharp

 Une énumération est un type de données dont le domaine de valeurs est un ensemble de constantes entières. Considérons un
programme qui a à gérer des mentions à un examen. Il y en aurait cinq : Passable,AssezBien,Bien,TrèsBien, Excellent.
On pourrait alors définir une énumération pour ces cinq constantes :
enum Mentions { Passable, AssezBien, Bien, TrèsBien, Excellent };
De façon interne, ces cinq constantes sont codées par des entiers consécutifs commençant par 0 pour la première constante, 1 pour
la suivante, etc... Une variable peut être déclarée comme prenant ces valeurs dans l'énumération :
1. // une variable qui prend ses valeurs dans l'énumération Mentions
2. Mentions maMention = Mentions.Passable;
On peut comparer une variable aux différentes valeurs possibles de l'énumération :
1. if (maMention == Mentions.Passable) {
2. Console.WriteLine("Peut mieux faire");
3. }
On peut obtenir toutes les valeurs de l'énumération :
1. // liste des mentions sous forme de chaînes
2. foreach (Mentions m in Enum.GetValues(maMention.GetType())) {
3. Console.WriteLine(m);
4. }
De la même façon que le type simple int est équivalent à la structure System.Int32, le type simple enum est équivalent à la structure
System.Enum. Cette structure a une méthode statique GetValues qui permet d'obtenir toutes les valeurs d'un type énuméré que l'on
passe en paramètre. Celui-ci doit être un objet de type Type qui est une classe d'informations sur le type d'une donnée. Le type
d'une variable v est obtenu par v.GetType(). Le type d'un type T est obtenu par typeof(T). Donc ici maMention.GetType() donne l'objet
Type de l'énumération Mentions et Enum.GetValues(maMention.GetType()) la liste des valeurs de l'énumération Mentions.
Si on écrit maintenant
1. //liste des mentions sous forme d'entiers
2. foreach (int m in Enum.GetValues(typeof(Mentions))) {
3. Console.WriteLine(m);
4. }
Ligne 2, la variable de boucle est de type entier. On obtient alors la liste des valeurs de l'énumération sous forme d'entiers. L'objet
de type  System.Type  correspondant au type de données  Mentions  est obtenu par  typeof(Mentions). On aurait pu écrire comme
précédemment, maMention.GetType().
Le programme suivant met en lumière ce qui vient d'être écrit :
1. using System;
2.
3. namespace Chap1 {
4. class P11 {
5. enum Mentions { Passable, AssezBien, Bien, TrèsBien, Excellent };
6. static void Main(string[] args) {
7. // une variable qui prend ses valeurs dans l'énumération Mentions
8. Mentions maMention = Mentions.Passable;
9. // affichage valeur variable
10. Console.WriteLine("mention=" + maMention);
11. // test avec valeur de l'énumération
12. if (maMention == Mentions.Passable) {
13. Console.WriteLine("Peut mieux faire");
14. }
15. // liste des mentions sous forme de chaînes
16. foreach (Mentions m in Enum.GetValues(maMention.GetType())) {
17. Console.WriteLine(m);
18. }
19. //liste des mentions sous forme d'entiers
20. foreach (int m in Enum.GetValues(typeof(Mentions))) {
21. Console.WriteLine(m);
22. }
23. }
24. }
25.}
Les résultats d'exécution sont les suivants :
1. mention=Passable
 2. Peut mieux faire
3. Passable
4. AssezBien
5. Bien
6. TrèsBien
7. Excellent
8. 0
9. 1
10.2
11.3
12.4


Publié par Drupal french Study