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 ?
Quelle est la meilleure façon de convertir un Enum en String dans .NET 3.5 ?
Pourquoi devrais-je préférer l'un de ces produits aux autres ? L'un d'eux est-il plus performant ?
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
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.
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)
6 votes
Coder pour ne pas casser la dotfuscation est l'exemple même de la queue qui remue le chien. Les producteurs de logiciels ne se disent pas : "Faisons une super application pour que dotfuscator ait quelque chose à faire". Dofuscator existe pour faciliter le développement de logiciels. S'il ne peut pas le faire... qu'il le fasse !