2010-06-09 5 views
9

Est-il possible que le compilateur convertisse automatiquement mes valeurs Enum en chaînes afin que je puisse éviter d'appeler explicitement la méthode ToString à chaque fois. Voici un exemple de ce que je voudrais faire:C# enum to string auto-conversion?

enum Rank { A, B, C } 

Rank myRank = Rank.A; 
string myString = Rank.A; // Error: Cannot implicitly convert type 'Rank' to 'string' 
string myString2 = Rank.A.ToString(); // OK: but is extra work 
+13

Malheureusement, la programmation implique beaucoup de dactylographie, de sorte que vous allez juste devoir s'y habituer. –

+0

Hmm pas sûr sur une énumération mais sur une classe vous pouvez utiliser un opérateur implicite. http://msdn.microsoft.com/en-us/library/85w54y0a.aspx –

+4

@codeka: Votre réponse est drôle. Je ne sais pas pour vous mais j'ai commencé à coder pour le seul fait que je suis fainéant et que je voulais rendre l'utilisation de l'ordinateur plus facile (par exemple: automatisation du script shell, fichiers batch simples, etc.). C'est une question parfaitement valable de demander comment rendre quelque chose plus facile. –

Répondre

9

Non Un ENUM est son propre type si vous voulez convertir à autre chose, vous devez faire un certain travail. Cependant, en fonction de ce que vous faites, certaines tâches appellent automatiquement ToString() pour vous. Par exemple, vous pouvez faire:

Console.Writeline(Rank.A); 
+0

Ok, juste un vœu pieux de ma part. – dcompiled

+6

Aussi, pour être clair, il n'y a rien de spécial à propos de 'Console.WriteLine', il a juste une surcharge qui prend un Object et l'enum est mise en boîte, passée en objet et ensuite' WriteLine' appelle 'ToString'. –

+1

@dcompiled - si vous êtes curieux, il est possible d'écrire votre propre opérateur de conversion implicite pour votre énumération en une chaîne! http://www.csharphelp.com/2006/10/type-conversion-and-conversion-operators-in-c/ –

1

Non, mais au moins vous pouvez faire des choses avec les énumérations qui appelleront leurs méthodes ToString() lorsque vous pourriez avoir besoin d'utiliser leur valeur de chaîne, par exemple:

Console.WriteLine(Rank.A); //prints "A". 
0

La syntaxe correcte doit être

myRank.ToString("F"); 
0

[Attention, hack] Incertain quant à savoir si cela est méchant, pour moi, il semble un compromis raisonnable.

var myEnumAsString = MyEnum+""; Console.WriteLine(myEnumAsString); //MyEnum

Cela forcera ToString() implicite

3

Vous n'êtes pas probablement à la recherche énumérations lui-même, mais une liste de chaîne constante. Il peut mieux répondre à vos besoins dans certains scénarios.

Utilisez ce lieu:

public static class Rank 
{ 
    public const string A = "A"; 
    public const string B = "B"; 
    public const string C = "C"; 
}