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 ?
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.
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.
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 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 !