Comment parcourir toutes les valeurs d'une Enum en C# : du débutant au professionnel
\n\nImaginez la situation : vous écrivez un jeu en C# et vous avez une énumération Difficulty avec des niveaux de difficulté : Easy, Normal, Hard, Insane. Vous devez les afficher tous dans un menu de sélection, ou, disons, créer une liste déroulante pour un configurateur. Comment faire ? Écrire un tableau de chaînes à la main ? Et si demain un nouveau niveau est ajouté ? Il faudrait modifier le code à trois endroits.
Heureusement, C# propose une solution élégante. La question "How to loop through all enum values in C#?" est l'une des plus populaires sur Stack Overflow (des centaines de milliers de vues). Et aujourd'hui, nous allons l'analyser en détail. Vous découvrirez non pas une, mais 4 méthodes pour parcourir les valeurs d'une enum, vous comprendrez laquelle utiliser selon le cas, et vous obtiendrez du code prêt à copier dans votre projet.
\n\nC'est parti !
\n\n\n\n
Qu'est-ce qu'une Enum en C# et pourquoi la parcourir ?
\n\nUne Enum (énumération) est un ensemble de constantes nommées. Au lieu de se souvenir que 0 = Easy, 1 = Normal, 2 = Hard, vous écrivez simplement Difficulty.Easy. Le code devient lisible et sûr.
Mais lorsque le projet contient 10 à 20 valeurs d'énumération, tôt ou tard se pose la question : les obtenir toutes. Par exemple :
\n- \n
- Remplir une ComboBox ou une Dropdown dans l'interface utilisateur. \n
- Créer des données de test pour toutes les variantes. \n
- Appliquer des attributs à chaque valeur. \n
- Comparer deux ensembles d'énumérations. \n
Au lieu d'écrire :
\nstring[] names = { "Easy", "Normal", "Hard", "Insane" };\n\n…nous utilisons la réflexion et les méthodes intégrées de .NET. C'est flexible, évolutif et ne nécessite pas de mise à jour manuelle.
\n\n\n\n
Méthode 1 : La classique — Enum.GetValues (la plus populaire)
\n\nC'est la réponse que vous trouverez sur Stack Overflow avec le plus grand nombre de votes. La méthode Enum.GetValues(typeof(YourEnum)) retourne un tableau de toutes les valeurs d'une énumération spécifique.
Exemple de code :
\nusing System;\n\npublic enum Difficulty\n{\n Easy,\n Normal,\n Hard,\n Insane\n}\n\nclass Program\n{\n static void Main()\n {\n Console.WriteLine("Tous les niveaux de difficulté :");\n \n // Obtient le tableau des valeurs de l'énumération\n Difficulty[] allDifficulties = (Difficulty[])Enum.GetValues(typeof(Difficulty));\n \n foreach (Difficulty level in allDifficulties)\n {\n Console.WriteLine($"Niveau : {level} (valeur numérique : {(int)level})");\n }\n }\n}\n\nSortie console :
\nTous les niveaux de difficulté :\nNiveau : Easy (valeur numérique : 0)\nNiveau : Normal (valeur numérique : 1)\nNiveau : Hard (valeur numérique : 2)\nNiveau : Insane (valeur numérique : 3)\n\nImportant : Enum.GetValues retourne un tableau de type Array, il faut donc le convertir explicitement vers votre type d'énumération. Depuis .NET 5, une version générique est disponible : Enum.GetValues<Difficulty>(), ce qui est un peu plus pratique.
// .NET 5+ \nDifficulty[] allDifficulties = Enum.GetValues<Difficulty>();\nforeach (var level in allDifficulties)\n{\n Console.WriteLine(level);\n}\n\n\n\n
Méthode 2 : Obtenir les noms avec Enum.GetNames
\n\nParfois, vous n'avez pas besoin des valeurs elles-mêmes, mais de leurs noms sous forme de chaînes (par exemple, pour l'interface utilisateur). Pour cela, il existe Enum.GetNames. Il retourne un tableau de chaînes.
Exemple :
\nstring[] names = Enum.GetNames(typeof(Difficulty));\nConsole.WriteLine("Noms des niveaux :");\nforeach (string name in names)\n{\n Console.WriteLine(name);\n}\n\nSortie :
\nNoms des niveaux :\nEasy\nNormal\nHard\nInsane\n\nQuand l'utiliser ? Si vous avez besoin de chaînes (par exemple, pour l'affichage dans une interface ou la journalisation), plutôt que des constantes d'énumération elles-mêmes.