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)

0voto

Nic Points 622

Cela fonctionnerait aussi.

    List<string> names = Enum.GetNames(typeof(MyEnum)).ToList();

0voto

John Go-Soco Points 436

ToString() donne le plus évident résultat du point de vue de la lisibilité, tandis que l'utilisation Enum.GetName() nécessite un peu plus d'analyse mentale pour comprendre rapidement ce qu'il essaie de faire (à moins que vous ne voyiez le modèle tout le temps).

Du point de vue de la performance pure, comme déjà fourni dans la réponse de @nawfal, Enum.GetName() est meilleur.

Cependant, si la performance est vraiment votre objectif, il serait encore mieux de fournir une recherche préalable (en utilisant un dictionnaire ou un autre type de mappage).

En C++/CLI, cela ressemblerait à ceci

Dictionary<String^, MyEnum> mapping;
for each (MyEnum field in Enum::GetValues(MyEnum::typeid))
{
    mapping.Add(Enum::GetName(MyEnum::typeid), field);
}

Comparaison avec une énumération de 100 éléments et 1000000 itérations :

Enum.GetName : ~800ms
.ToString() : ~1600ms
Cartographie du dictionnaire : ~250ms

0voto

DerSkythe Points 13

Avec les nouvelles alertes de Roslyn, cette question m'a fait réfléchir. Mes recherches m'ont conduit à 2 bibliothèques. Les deux offrent de meilleures performances que les méthodes intégrées de .NET 5 ToString, GetName, etc. Jetez un coup d'oeil aux benchmarks :

Enums.NET

FastEnum

-3voto

Brian Points 1531

Simple : les noms des énumérations dans une liste :

List<String> NameList = Enum.GetNames(typeof(YourEnumName)).Cast<string>().ToList()

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