2013-06-21 15 views
10

Wie kann ich C# Enum haben, dass, wenn ich auf String wählte er eine andere Zeichenfolge zurückgibt, wie in Java kann es durchändern Enum Anzeige

public enum sample{ 
    some, other, things; 

    public string toString(){ 
     switch(this){ 
      case some: return "you choose some"; 
      default: break; 
     } 
    } 
} 

Console.writeln(sample.some) ausgeben wird geschehen:

you choose some 

Ich möchte nur, dass meine Enums eine andere Zeichenfolge zurückgeben, wenn ich versuche, sie anzurufen.

+0

Was haben Sie versucht? Oder wo versagt es? – Kangkan

+2

@Kangkan - da Sie nicht von enum in C# ableiten können, gibt es nichts direkt zu versuchen ... –

Antwort

12

Dies ist meiner Kenntnis nach nicht möglich. Sie können jedoch eine Erweiterungsmethode schreiben, die eine andere Saite bekommt:

public static class EnumExtensions 
{ 
    public static string ToSampleString(this SampleEnum enum) 
    { 
     switch(enum) 
     { 
      case SampleEnum.Value1 : return "Foo"; 
      etc. 
     } 
    } 
} 

Nun, rufen Sie diese neue ToSampleString auf Instanzen von SampleEnum:

mySampleEnum.ToSampleString(); 

Wenn Sie mit Erweiterungsmethoden in C# nicht vertraut sind, Lesen Sie mehr here.

Eine weitere Option ist die Verwendung eines Description Attributs über jedem enum Wert, wie beschrieben here.

+0

Sie könnten eine Kombination der Beschreibung für die enum-Klasse sowie den enum-Wert verwenden, um eine generische Nachricht zu erstellen, die einmal definiert ist , mit der Erweiterungsmethode, um es zusammen zu komponieren.Würde für eine wiederverwendbare Erweiterungsmethode sorgen. +1 – Phill

+1

Warum ist es so kompliziert, das Description-Attribut abzurufen? – CodeCamper

+1

Das Beschreibungsattribut wird nur einmal kompliziert. Sie fügen es als eine Erweiterungsmethode hinzu und sind für alle Enums verfügbar und betrachten es nicht mehr. Mit dieser obigen Antwort müssen Sie für jede Enum eine Methode wie diese erstellen. Sie können sich ein schönes Beispiel hier anschauen: http://weblogs.asp.net/stefessedich/archive/2008/03/12/enum-with-string-values-in-c.aspx –

3

Sie möchten ein Wörterbuch. Ein Enumerator zählt (gibt eine Zahl) für seine Werte auf. Sie möchten, dass ein Zeichenfolgenwert zurückgegeben wird, wenn Sie einen Zeichenfolgenschlüssel angeben. Versuchen Sie so etwas wie:

Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
dictionary.Add("some", "you choose some"); 
dictionary.Add("other", "you choose other"); 
dictionary.Add("things", "you choose things"); 

Dann ist dieser Code:

string value = dictionary["some"]; 
Console.writeln(value); 

will return "Sie wählen einige"

0

Wenn Sie nur Enum erhalten möchten als String Sie diese Methode verwenden können:

Enum.GetName(typeof(sample), value); 

Diese Methode gibt den Namen Enum anstelle von int zurück.

4

Ich würde es dekorativ machen, indem ich ein Attribut z. Beschreibung und Dekoration der Enum-Werte damit.

z.B.

public enum Rate 
{ 
    [Description("Flat Rate")] 
    Flat, 
    [Description("Time and Materials")] 
    TM 
} 

Dann GetCustomAttributes verwenden zu lesen/die Werte anzuzeigen. http://msdn.microsoft.com/en-us/library/system.attribute.getcustomattributes.aspx

@CodeCamper Sorry über die späte Antwort, aber hier ist einige Beispiel-Code der Description zu lesen:

Erweiterungsmethode:

public static class EnumExtensions 
{ 
    public static string Description<T>(this T t) 
    { 
     var descriptionAttribute = (DescriptionAttribute) typeof (T).GetMember(t.ToString()) 
            .First().GetCustomAttribute(typeof (DescriptionAttribute)); 

     return descriptionAttribute == null ? "" : descriptionAttribute.Description; 
    } 
} 

Verbrauch:

Rate currentRate = Rate.TM; 
Console.WriteLine(currentRate.Description()); 
+0

Ich habe Artikel darüber gelesen, wie man das macht und es scheint aus irgendeinem Grund so kompliziert zu sein. Können Sie bitte die einfachsten und kleinsten Codezeilen anzeigen, um die Beschreibung abzurufen? – CodeCamper

+0

@CodeCamper Ich habe Beispiel Code zu meiner Antwort oben hinzugefügt. – lahsrah

+0

Danke für den Zusatz! +1 – CodeCamper