214 votes

Convertir un Enum en String

Quelle est la meilleure façon de convertir un Enum en String dans .NET 3.5 ?

  • Enum.GetName
  • Enum.Format
  • ToString

Pourquoi devrais-je préférer l'un de ces produits aux autres ? L'un d'eux est-il plus performant ?

13 votes

J'ai cherché et je n'ai pas pu trouver de doublon. Si vous pouvez fournir un lien, je supprimerai cette question.

1 votes

Parfois, l'utilisation d'une instruction switch n'est pas la meilleure pratique (lorsque vous avez de grandes énumérations), vous pouvez utiliser Dict<> à la place.

1 votes

Si vous voulez de meilleures performances, vous pouvez utiliser la classe décrite dans cet article. codeproject.com/KB/dotnet/enum.aspx . L'utilisation ressemblera à ceci Enum<VotreEnum>.ToString(votreValeur) ou Enum<VotreEnum>.ToString((int)votreValeur)

17voto

Tamas Czinege Points 49277

Enum.GetName()

Format() n'est en fait qu'une enveloppe autour de GetName() avec une certaine fonctionnalité de mise en forme (ou InternalGetValueAsString() pour être exact). ToString() est à peu près la même chose que Format() . Je pense GetName() est la meilleure option car ce qu'elle fait est totalement évident pour quiconque lit la source.

9voto

DancesWithBamboo Points 3374

Je crée une méthode d'extension "Description" et je l'attache à l'enum afin d'obtenir un nommage vraiment convivial qui inclut les espaces et la casse. Je n'ai jamais aimé utiliser la valeur de l'énumération elle-même comme texte affichable, car c'est quelque chose que les développeurs utilisent pour créer un code plus lisible. Il n'est pas destiné à être affiché sur l'interface utilisateur. Je veux être en mesure de modifier l'interface utilisateur sans avoir à passer par toutes les énumérations et à les modifier.

0 votes

Pouvez-vous ajouter un extrait de code ?

6voto

Perry Neal Points 667

Je ne sais pas quelle est la méthode "préférée" (demandez à 100 personnes et obtenez 100 opinions différentes) mais faites ce qui est le plus simple et ce qui fonctionne. GetName fonctionne mais nécessite beaucoup plus de frappes au clavier. ToString() semble faire le travail très bien.

1voto

GlennG Points 909

Pour les aficionados de VB :

EnumStringValue = System.Enum.GetName(GetType(MyEnum), MyEnumValue)

1voto

Paulo Guimarães Points 124

Pour moi, le moyen le plus simple de Convertir un Enum à Chaîne de caractères et vice-versa :

// Sample for Enum.ToString(String)
using System;

class Sample
{
    enum Colors {Red, Yellow = 12};

    public static void Main()
    {
    Colors myColor = Colors.Yellow;

    Console.WriteLine("Colors.Red = {0}", Colors.Red.ToString("d"));
    Console.WriteLine("Colors.Yellow = {0}", Colors.Yellow.ToString("d"));

    Console.WriteLine("{0}myColor = Colors.Yellow{0}", Environment.NewLine);

    Console.WriteLine("myColor.ToString(\"g\") = {0}", myColor.ToString("g"));
    Console.WriteLine("myColor.ToString(\"G\") = {0}", myColor.ToString("G"));

    Console.WriteLine("myColor.ToString(\"x\") = {0}", myColor.ToString("x"));
    Console.WriteLine("myColor.ToString(\"X\") = {0}", myColor.ToString("X"));

    Console.WriteLine("myColor.ToString(\"d\") = {0}", myColor.ToString("d"));
    Console.WriteLine("myColor.ToString(\"D\") = {0}", myColor.ToString("D"));

    Console.WriteLine("myColor.ToString(\"f\") = {0}", myColor.ToString("f"));
    Console.WriteLine("myColor.ToString(\"F\") = {0}", myColor.ToString("F"));
    }
}
/*
This example produces the following results:
Colors.Red = 0
Colors.Yellow = 12

myColor = Colors.Yellow

myColor.ToString("g") = Yellow
myColor.ToString("G") = Yellow
myColor.ToString("x") = 0000000C
myColor.ToString("X") = 0000000C
myColor.ToString("d") = 12
myColor.ToString("D") = 12
myColor.ToString("f") = Yellow
myColor.ToString("F") = Yellow
*/ 

Maintenant, pour reconvertir la chaîne sélectionnée en Enum vous pouvez juste Analyser il :

var myYellowEnum = Enum.Parse(typeof (Colors), "Yellow"); // Returns Yellow

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X