Les enums sont un type de données utile qui vous permet de définir une liste d’options nommées pour une variable. Par exemple, si vous voulez stocker chaque jour de la semaine, vous pouvez utiliser un enum pour représenter les valeurs valides.
Les enums rendent votre code plus facile à lire et à écrire en encourageant les noms significatifs et en limitant les valeurs que vous pouvez utiliser. Il est souvent pratique d’utiliser une instruction switch pour gérer les valeurs possibles d’un enum.
Vous pouvez déclarer et utiliser les enums dans de nombreux langages de programmation, y compris C#.
Comment déclarer un enum en C# ?
En C#, vous déclarerez généralement les enums au niveau de l’espace de nom. Par exemple, dans une application console C#, vous pouvez déclarer vos enums comme des propriétés de classe. Vous pouvez voir un exemple dans ce repo GitHub.
class Program
{
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
static void Main(string[] args)
{
}
}
Lorsque vous déclarez une énumération, chaque option reçoit une valeur entière pour représenter son index. Par défaut, la première valeur de l’énumération a un index de 0. Pour changer cela, vous pouvez spécifier votre propre index pour le premier élément lorsque vous déclarez l’énumération :
enum Weekday {
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
Dans ce cas, l’index du premier élément est le suivant Lundi débute à 1. L’indice de l’élément suivant Mardi sera 2et ainsi de suite.
Comment accéder à la valeur d’une Enum en C# ?
Il existe de nombreuses façons d’accéder aux valeurs stockées dans les enums. La valeur renvoyée pour chaque option de l’enum est l’index. Dans cet exemple, la valeur de Jour de la semaine.vendredi est 5.
Une façon de récupérer le nom de l’enum est d’utiliser la fonction Enums.GetName() fonction. Elle obtient le nom de l’option à l’index 5 :
string friday = Enum.GetName(typeof(Weekday), Weekday.Friday);
Console.WriteLine("Thank God it's " + friday + "!");
// Output = Thank God it's Friday!
Vous pouvez également accéder à une valeur en utilisant son index. Dans ce cas, la valeur à l’index 2 dans l’enum Weekday (qui est mardi) sera stockée dans la variable :
Weekday tuesday = (Weekday)2;
Console.WriteLine("Today is " + tuesday);
// Output = Today is Tuesday
Lorsque vous passez un enum en tant qu’argument dans la fonction Console.WriteLine(), le toString() pour l’énumération s’exécute automatiquement. Cela signifie qu’au lieu d’imprimer la vraie valeur numérique de l’enum, qui est 5la valeur de la chaîne sera imprimée, Vendredi.
Console.WriteLine(Weekday.Thursday + " is the new " + Weekday.Friday);
// Output = Thursday is the new Friday
Vous pouvez également convertir ou analyser le type de données en un nombre entier comme autre moyen de stocker l’index d’une option :
int mondayIndex = (int)Weekday.Monday;
Console.WriteLine(mondayIndex);
// Output = 1
Comment comparer des Enums en C#
En C#, vous pouvez comparer des énumérations en utilisant les opérateurs de comparaison (==, !=, < ;, > ;, <=, >=). Cela permet de comparer la valeur numérique des options.
Weekday day1 = Weekday.Monday;
Weekday day2 = Weekday.Tuesday;
if (day1 == day2)
{
Console.WriteLine("The days are the same.");
}
else
{
Console.WriteLine("The days are different.");
}
Dans cet exemple, la valeur de Weekday.Monday est 1, et la valeur de Weekday.Tuesday est 2. 1 == 2 La comparaison échouera.
Une autre façon de comparer les enums est la méthode Equals() méthode :
if (day1.Equals(day2))
{
Console.WriteLine("The days are the same.");
}
else
{
Console.WriteLine("The days are different.");
}
Vous pouvez également utiliser une instruction switch C# pour comparer une valeur à chaque option d’une énumération. Dans cet exemple, le code sera dans le cas du mercredi :
Weekday valueToCompare = Weekday.Wednesday;
switch (valueToCompare)
{
case Weekday.Monday:
Console.WriteLine("I need coffee.");
break;
case Weekday.Tuesday:
Console.WriteLine("I need coffee.");
break;
case Weekday.Wednesday:
Console.WriteLine("I need coffee.");
break;
case Weekday.Thursday:
Console.WriteLine("Thursday is the new Friday!");
break;
case Weekday.Friday:
Console.WriteLine("Thank God it's Friday!");
break;
case Weekday.Saturday:
Console.WriteLine("My favorite day!");
break;
case Weekday.Sunday:
Console.WriteLine("My other favorite day!");
break;
default:
Console.WriteLine("Invalid day of the week.");
break;
}
Comment itérer sur les Enums en C# ?
Vous pouvez itérer sur des enums en C# en utilisant la fonction Enum.GetValues() qui renvoie un tableau de toutes les valeurs de l’énumération. Cet extrait de code imprime chaque jour de la semaine, y compris le lundi, le mardi, etc :
foreach (Weekday day in Enum.GetValues(typeof(Weekday)))
{
Console.WriteLine((int)day); // To print the index
Console.WriteLine(day); // To print the text value
}
Vous pouvez également itérer sur les valeurs de l’énumération à l’aide de la méthode Enum.GetNames() méthode. Elle renvoie une liste de valeurs de type chaîne représentant les noms des options de l’enum :
foreach (string name in Enum.GetNames(typeof(Weekday)))
{
int index = (int)(Weekday)Enum.Parse(typeof(Weekday), name);
Console.WriteLine(index); // To print the index
Console.WriteLine(name); // To print the text value
}
Utilisation des Enums en C#
Vous pouvez utiliser les enums dans votre code pour le rendre plus lisible et moins sujet aux bogues. Les enums peuvent également être très utiles lorsqu’ils sont associés à d’autres structures, comme les dictionnaires.