Comment obtenir un int à partir d'un enum en C# : du débutant au pro

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

Introduction : pourquoi un enum sans int, c'est comme un café sans caféine ?

\n\n

Imaginez la situation : vous écrivez du code génial en C#, vous utilisez des énumérations (enum) pour stocker les statuts de commande, les jours de la semaine ou les niveaux d'accès. Tout est beau et lisible. Mais soudain, une tâche arrive : enregistrer cette valeur dans une base de données, l'envoyer via une API HTTP ou simplement l'afficher dans un journal. Et là, vous vous heurtez à un mur — il faut transformer l'enum en int.

\n\n

Ce n'est pas juste un « caprice » de manuel. Selon les statistiques de Stack Overflow, la question « Get int value from enum in C# » cumule des centaines de milliers de vues. Même les développeurs expérimentés s'y perdent parfois : un cast ? Convert.ToInt32 ? Et si le type entier sous-jacent n'est pas int ?

\n\n

Dans cet article, nous allons passer en revue toutes les méthodes légales pour obtenir une valeur entière à partir d'un enum en C#. En commençant par le simple cast de type et en terminant par des astuces avancées avec Unsafe.As (oui, ça existe aussi !). Vous découvrirez quelle méthode est la plus rapide, laquelle est la plus sûre, et laquelle il vaut mieux ne pas utiliser en production.

\n\n

1. Comment fonctionne un enum en C# : petit rappel

\n\n

Avant de convertir, rappelons les bases. En C#, enum est un type-valeur qui hérite de System.Enum, et son type sous-jacent (underlying type) par défaut est int. Mais vous pouvez spécifier explicitement un autre type :

\n\n
public enum Status : byte\n{\n    New = 0,\n    Active = 1,\n    Closed = 2\n}\n\npublic enum Priority : long\n{\n    Low = 10,\n    Medium = 50,\n    High = 100\n}
\n\n

C'est important ! Si votre enum utilise byte ou long, un simple cast vers int peut entraîner une erreur ou une perte de données.

\n\n

2. Méthode n°1 : le cast explicite — le classique

\n\n

La méthode la plus évidente et la plus rapide est d'utiliser l'opérateur de cast. Elle fonctionne lorsque vous savez précisément que le type sous-jacent est int.

\n\n
enum Day { Monday = 1, Tuesday = 2, Wednesday = 3 }\n\nDay today = Day.Tuesday;\nint dayValue = (int)today; // Résultat : 2\n\nConsole.WriteLine(dayValue); // Affiche : 2
\n\n

Avantages :

\n
    \n
  • Performances maximales — le compilateur génère une seule instruction IL.
  • \n
  • Simplicité et lisibilité.
  • \n
\n

Inconvénients :

\n
    \n
  • Si le type sous-jacent n'est pas int, le compilateur génère une erreur ou un avertissement.
  • \n
  • Ne fonctionne pas avec les enum définis avec long ou byte (nécessite un double cast).
  • \n
\n\n

Quand l'utiliser : dans 90 % des cas, lorsque votre enum est standard (: int).

\n\n

3. Méthode n°2 : Convert.ToInt32 — le couteau suisse

\n\n

La méthode Convert.ToInt32() est un couteau suisse pour la conversion. Elle accepte un object et tente de le convertir en int via l'interface IConvertible.

\n\n
enum Status { New = 0, Active = 1, Closed = 2 }\n\nStatus current = Status.Active;\nint statusCode = Convert.ToInt32(current); // Résultat : 1\n\nConsole.WriteLine(statusCode); // 1
\n\n

Avantages :

\n
    \n
  • Fonctionne avec n'importe quel type sous-jacent (byte, short, long, etc.).
  • \n
  • Ne nécessite pas de connaître explicitement le type de l'enum.
  • \n
\n

Inconvénients :

\n
    \n
  • Plus lent qu'un cast direct (appel à une méthode virtuelle).
  • \n
  • Peut lever une InvalidCastException si on lui passe autre chose qu'un enum.
  • \n
\n\n

Quand l'utiliser : lorsque vous écrivez du code générique ou travaillez avec un enum dont le type sous-jacent est inconnu à la compilation.

\n\n

4. Méthode n°3 : GetHashCode() — une astuce dangereuse (ne faites pas ça !)

\n\n

Sur Internet, on peut trouver le conseil « génial » d'utiliser GetHashCode(). Oui, techniquement, il

Blogs

Book Recommendations