Convertir une chaîne en Enum en C# : guide avec exemples pour un code flexible

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

Comment convertir une chaîne en enum en C# : du débutant au pro



Chaque développeur C# rencontre tôt ou tard une situation où il doit convertir une chaîne ordinaire en énumération (enum). Vous recevez des données JSON, lisez des paramètres depuis un fichier de configuration ou acceptez une commande d'un utilisateur — et voilà une chaîne devant vous, alors que le code attend un enum. Sans une conversion correcte, vous risquez d'obtenir une exception ou, pire encore, une erreur invisible dans la logique.



Dans cet article, nous allons examiner la conversion d'une chaîne en enum en C#, des méthodes simples aux techniques avancées. Vous apprendrez à analyser les chaînes en toute sécurité, à gérer les erreurs et à écrire un code élégant. Le contenu est basé sur des questions réelles de Stack Overflow — le sujet a recueilli des milliers de vues pour une bonne raison.



C'est parti !



Pourquoi la conversion d'une chaîne en enum est une tâche courante



Les énumérations en C# sont un outil puissant pour créer un code lisible et typé. Mais le monde extérieur travaille généralement avec des chaînes : les API renvoient "Admin", l'utilisateur saisit "readonly", la base de données stocke "Pending". Pour relier ces mondes, une conversion string en enum C# est nécessaire.



Examinons les scénarios typiques :

  • Désérialisation JSON — le champ de statut arrive sous forme de chaîne
  • Analyse des arguments de ligne de commande
  • Lecture des paramètres depuis appsettings.json
  • Traitement des entrées utilisateur dans les formulaires web


Sans une approche correcte, vous obtiendrez soit une exception, soit des bogues difficiles à détecter. Penchons-nous sur la boîte à outils.



Méthode de base : Enum.Parse — rapide et simple



La méthode la plus connue pour convertir une chaîne en enum en C# est Enum.Parse. Elle existe depuis les premières versions de .NET et est encore activement utilisée.



using System;

public enum UserRole{ Admin, Moderator, User, Guest}

class Program{ static void Main() { string input = "Admin"; UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input); Console.WriteLine(role); // Sortie : Admin }}


Ici, nous convertissons explicitement le résultat vers le type souhaité, car Enum.Parse retourne un object. La méthode est sensible à la casse : la chaîne "admin" lèvera une exception. Si vous n'êtes pas sûr de la casse, ajoutez un troisième paramètre :



UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input, ignoreCase: true);


Maintenant, "admin", "ADMIN" et même "AdMiN" seront correctement convertis. Mais il y a un inconvénient : si la chaîne ne correspond à aucune valeur d'enum, vous obtiendrez une ArgumentException. Et cela signifie que le programme plantera.



Quand Enum.Parse est un mauvais choix

  • Vous ne contrôlez pas les données d'entrée (saisie utilisateur)
  • La chaîne peut être nulle ou vide
  • Vous voulez éviter les exceptions


Pour ces cas, Enum.TryParse a été conçu.



Approche sécurisée : Enum.TryParse — sans exceptions



Enum.TryParse en C# est votre bouée de sauvetage. Il ne lève pas d'exception, mais retourne un bool : true si la conversion réussit, et false dans le cas contraire.



string input = "Moderator";if (Enum.TryParse(input, ignoreCase: true, out UserRole result)){    Console.WriteLine($"Rôle : {result}");}else{    Console.WriteLine("Impossible de reconnaître le rôle");}


Notez que TryParse est une méthode générique, donc il n'est pas nécessaire de convertir le résultat. Le paramètre ignoreCase fonctionne comme dans Parse. Cette méthode est idéale pour un parsing sécurisé d'enum en C#.



Mais il y a un piège : TryParse considère l'analyse des chaînes numériques comme réussie. La chaîne "42" sera convertie en valeur d'enum avec l'équivalent numérique 42, même si cette valeur n'existe pas. Pour éviter cela, ajoutez

Blogs

Book Recommendations