2010-06-09 11 views
9

Ist es möglich, dass der Compiler meine Enum-Werte automatisch in Zeichenfolgen konvertiert, damit ich vermeiden kann, die ToString-Methode jedes Mal explizit aufzurufen. Hier ist ein Beispiel dafür, was Ich mag würde tun:C# enum um Auto-Konvertierung zu string?

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

Leider beinhaltet die Programmierung viel Schreibarbeit, so dass Sie gehen nur es sich gewöhnen zu müssen. –

+0

Hmm nicht sicher über eine Enum aber auf einer Klasse könnten Sie einen impliziten Operator verwenden. http://msdn.microsoft.com/en-us/library/85w54y0a.aspx –

+4

@codeka: Ihre Antwort ist lustig. Weiß nicht über dich, aber ich fing an, nur für die Tatsache zu kodieren, dass ich faul bin und den Computer einfacher benutzen wollte (zB: Shell-Skript-Automatisierung, einfache Batch-Dateien usw.). Es ist eine vollkommen gültige Frage zu fragen, wie man etwas leichter machen kann. –

Antwort

9

Nr Ein ENUM ist es eigene Art ist, wenn Sie es etwas anderes konvertieren wollen, müssen Sie einige Arbeit tun.

Je nachdem, was Sie damit tun, werden einige Aufgaben ToString() automatisch für Sie aufrufen. Zum Beispiel können Sie tun:

Console.Writeline(Rank.A); 
+0

Ok, nur Wunschdenken von meiner Seite. – dcompiled

+6

Um klar zu sein, es gibt nichts besonderes an 'Console.WriteLine', es hat nur eine Überladung, die ein Object nimmt und die enum wird eingerahmt, als Objekt übergeben und' WriteLine' ruft 'ToString' darauf auf. –

+1

@dcompiled - wenn Sie neugierig sind, ist es möglich, Ihren eigenen impliziten Konvertierungsoperator für Ihre Enumeration in einen String zu schreiben! http://www.csharphelp.com/2006/10/type-conversion-and-conversion-operators-in-c/ –

1

Nein, aber zumindest kann man die Dinge mit Aufzählungen tun, die ihre ToString() Methoden aufrufen, wenn Sie ihre String-Wert verwenden können müssen, zB:

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

Die korrekte Syntax sollte sein

0

[Vorsicht, hack] Unsicher, ob das ist böse, für mich scheint es ein vernünftiger Kompromiss.

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

Dies wird implizit ToString Kraft()

3

Sie sind wahrscheinlich nicht für Aufzählungen selbst suchen, sondern eine Liste von String-Konstante. Es kann in einigen Szenarien besser zu Ihren Bedürfnissen passen.

Verwenden Sie stattdessen:

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