2016-07-15 11 views
-1

Keines dieser Arbeit ein Doppel in eine Zeichenfolge typisieren:Wie in einer Enum-Struktur in C#

public enum OsVersioniOS : int 
{ 
    '8.0' = 1 << 0, 
    "8.1" = 1 << 1, 
    string(8.2) = 1 << 2, 
} 

Ich mag 8.0 [welche Art von iOS Betriebssystem ist] in der Enum als String zu sehen.

Antwort

3

Dies kann nicht getan werden, Aufzählungen gültig idetifiers nach dem Unterabschnitt Identifiers (Ziffer 2.4.2 im C# 5.0 version) der C# Language Specification haben muss, ist das Beste, was Sie tun können, ein DisplayAttribute verwenden, die können oder auch nicht Sie werden automatisch ausgewählt, je nachdem, in welchem ​​Framework Sie Informationen für den Benutzer anzeigen.

public enum OsVersioniOS : int 
{ 
    [Display(ShortName="8.0")] 
    v8_0 = 1 << 0, 
    [Display(ShortName="8.1")] 
    v8_1 = 1 << 1, 
    [Display(ShortName="8.2")] 
    v8_2 = 1 << 2, 
} 

ist hier ein Helfer Erweiterung Methode, die die Enum in ihm die Zeichenfolge Beschreibung wenden können, wenn Sie nicht einen Rahmen verwenden, die die Short automatisch ziehen wird.

/// <summary> 
/// Gets the text from the <see cref="DisplayAttribute"/> ShortName associated with the enum member. 
/// </summary> 
/// <param name="value">The enum value to check.</param> 
/// <returns>The value of the Display - ShortName attribute or null if not available.</returns> 
public static string GetShortName(this Enum enumValue) 
{ 
    return enumValue.GetType() 
        .GetMember(enumValue.ToString()) 
        .First() 
        .GetCustomAttribute<DisplayAttribute>() 
        .GetShortName(); 
} 
+1

Genauer gesagt müssen die 'enum'-Member Namen haben, die ___identifiers___ gemäß dem Unterabschnitt _Identifiers_ (Unterabschnitt 2.4.2 in der Version, die ich habe) der C# -Sprachspezifikation. Insbesondere muss das Start-Zeichen ein Buchstabe oder ein Unterstrich sein. –

+0

@JeppeStigNielsen danke, aktualisierte Antwort und lieferte einen Link zu den C# -Spezifikationen. –

0

Es ist nicht möglich, ist der richtige Weg:

public enum OsVersioniOS 
{ 
    [Description("8.1")] 
    One, 
    [Description("8.2")] 
    Two 
} 
0

Als Scott und Renato beide gesagt haben, der richtige Weg, dies zu erreichen, ist ein Attribut zu verwenden, um die Aufzählung mit den Informationen dekorieren Sie möchte angezeigt werden.

public enum OsVersioniOS : int 
{ 
    [Display(Name="8.0")] 
    Version_8_0 = 1 << 0, 
    [Display(Name="8.1")] 
    Version_8_1 = 1 << 1, 
    [Display(Name="8.2")] 
    Version_8_2 = 1 << 2, 
    //etc. 
} 

Sobald Sie diese Attribute definiert haben, können Sie Ihre Einstellungen aus den Aufzählungen per Reflektion abrufen. Zum Beispiel:

{ 
    OsVersioniOS enumMember = GetEnumThatYouNeedNameOf(); 
    var type = typeof(OsVersioniOS); 
    var memberInfo = type.GetMember(enumMember.ToString()); 
    var attribute = (DisplayAttribute)memberInfo[0].GetCustomAttributes(typeof(DisplayAttribute),false) 
    var value = attribute.Name; 
    return value; 
} 

würde ich vorschlagen, in einem Verlängerungsverfahren oder statische Hilfsmethode Umwickeln Sie, dass es eine Menge gehen werden. Wenn Sie mehr Werte benötigen, können Sie Ihr eigenes Attribut erstellen, anstatt Anzeige oder Beschreibung zu verwenden.