Comment énumérer toutes les valeurs d'une Enum en C# : analyse complète pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi la question "How can I enumerate an enum?" est-elle si populaire ?

\n\n

Si vous avez déjà programmé en C# et rencontré des énumérations (enum), vous vous êtes sûrement demandé : « Comment puis-je obtenir toutes les valeurs de cette enum ? ». Cette question est un véritable succès sur Stack Overflow, avec des milliers de vues. Et ce n'est pas surprenant : l'énumération d'une enum est l'une de ces tâches qui semble simple, mais sans connaître la syntaxe correcte, elle peut dérouter même un développeur expérimenté.

\n\n

Dans cet article, nous allons voir comment énumérer correctement toutes les valeurs d'une enum en C#, présenter des exemples de code fonctionnels que vous pouvez copier directement dans votre projet, et aborder les pièges à éviter. C'est parti !

\n\n

Qu'est-ce qu'une enum en C# ? Petit rappel

\n\n

Enum (énumération) est un type de données qui permet de définir un ensemble de constantes nommées. Par exemple, les jours de la semaine, les statuts de commande ou les types d'erreurs. En C#, une enum se déclare ainsi :

\n\n
public enum DayOfWeek\n{\n    Monday,\n    Tuesday,\n    Wednesday,\n    Thursday,\n    Friday,\n    Saturday,\n    Sunday\n}
\n\n

Chaque élément se voit attribuer par défaut une valeur entière (commençant à 0). Mais il est souvent nécessaire de parcourir tous les éléments d'une enum — par exemple, pour les afficher dans une liste déroulante, créer un tableau ou vérifier si une valeur existe.

\n\n

Comment énumérer toutes les valeurs d'une enum : méthode de base

\n\n

La méthode la plus populaire et la plus simple consiste à utiliser la méthode statique Enum.GetValues(). Elle retourne un tableau de toutes les valeurs de l'énumération spécifiée. Voici comment cela fonctionne :

\n\n
using System;\n\npublic class Program\n{\n    public enum Status\n    {\n        New,\n        InProgress,\n        Completed,\n        Cancelled\n    }\n\n    public static void Main()\n    {\n        // Obtenir toutes les valeurs de l'enum\n        Status[] allStatuses = (Status[])Enum.GetValues(typeof(Status));\n\n        // Les parcourir avec foreach\n        foreach (Status status in allStatuses)\n        {\n            Console.WriteLine(status);\n        }\n    }\n}
\n\n

Résultat de l'exécution :

\n
New\nInProgress\nCompleted\nCancelled
\n\n

Notez que nous convertissons explicitement le résultat en tableau Status[], car Enum.GetValues() retourne un Array (non typé).

\n\n

Alternative : Enum.GetNames()

\n\n

Si vous n'avez pas besoin des valeurs elles-mêmes, mais uniquement de leurs noms sous forme de chaînes, utilisez Enum.GetNames() :

\n\n
string[] statusNames = Enum.GetNames(typeof(Status));\nforeach (string name in statusNames)\n{\n    Console.WriteLine(name);\n}
\n\n

Le résultat sera le même, mais le type d'élément est string, et non Status. C'est pratique lorsque vous travaillez avec une interface utilisateur ou de la sérialisation.

\n\n

Approche moderne : version générique (C# 7.3+)

\n\n

Depuis C# 7.3, nous disposons d'une méthode plus élégante — Enum.GetValues<T>(). Elle retourne un tableau d'un type spécifique, sans nécessiter de conversion :

\n\n
Status[] allStatuses = Enum.GetValues<Status>();\n\nforeach (Status status in allStatuses)\n{\n    Console.WriteLine($"ID: {(int)status}, Name: {status}");\n}
\n\n

Cette méthode est plus concise et plus sûre du point de vue des types. Si vous utilisez une version moderne de C# (ce que vous devriez faire !), je vous la recommande.

\n\n

Exemple concret : remplir une liste déroulante

\n\n

Imaginez que vous développez une application de gestion de tâches. Vous devez afficher à l'utilisateur une liste des statuts possibles dans un menu déroulant. Voici comment faire avec l'énumération d'une enum :

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class TaskManager\n{\n    public enum TaskStatus\n    {\n        NotStarted,\n        InProgress,\n        WaitingForReview,\n        Done\n    }\n\n    publ                

Blogs

Book Recommendations