2011-07-15 56 views
2

我已經看到很多方法來使用泛型將字符串轉換爲枚舉,但無法找到一個簡單的方法來使用泛型將枚舉轉換爲字符串。通用方法枚舉到字符串轉換

我的意思是傳遞枚舉和值並返回映射的枚舉名稱。

任何建議

+4

myEnum.ToString()不會做你想要的? –

+1

你是否在尋找['Enum.GetName'](http://msdn.microsoft.com/en-us/library/system.enum.getname.aspx)? – V4Vendetta

+1

@ V4Vendetta.do你碰巧知道Enum.GetName和enum.ToString()之間的區別? – user9969

回答

5

如何:

enum E 
{ 
    A = 2, 
    B = 3 
} 

public static string GetLiteral<T>(object value) 
{ 
    return Enum.GetName(typeof(T), value); 
} 

static void Main(string[] args) 
{ 
    Console.WriteLine(GetLiteral<E>(2)); 
    Console.WriteLine(GetLiteral<E>(3)); 
} 
3

我會寫一個擴展方法來做到如

using System.ComponentModel; 

public enum StatusResult 
{ 
    [Description("Success")] 
    Success, 
    [Description("Failure...")] 
    Failure 
} 

public static class AttributesHelperExtension 
{ 
    public static string ToDescription(this Enum value) 
    { 
     DescriptionAttribute[] da = (DescriptionAttribute[])(value.GetType().GetField(value.ToString())).GetCustomAttributes(typeof(DescriptionAttribute), false); 
     return da.Length > 0 ? da[0].Description : value.ToString(); 
    } 

    public static T ToEnum<T>(this string stringValue, T defaultValue) 
    { 
     foreach (T enumValue in Enum.GetValues(typeof(T))) 
     { 
      DescriptionAttribute[] da = (DescriptionAttribute[])(typeof(T).GetField(enumValue.ToString())).GetCustomAttributes(typeof(DescriptionAttribute), false); 
      if (da.Length > 0 && da[0].Description == stringValue) 
       return enumValue; 
     } 
     return defaultValue; 
    } 
} 

我們稱這種使用

string value = StatusResult.Failure.ToDescription(); 
+0

這不會將字符串轉換爲枚舉。 – Jethro

+0

@Jethro:我更新了我的答案,包括將字符串轉換爲枚舉。 –

+0

@Mangesh Pimpalkar你可以'返回默認值(T)'而不是使用額外的冗餘參數'T defaultValue'來處理默認值。 – Kuncevic

3

這當你知道價值,並且類型枚舉,但你想獲得枚舉實例重新被匹配值..

static T ConvertToEnum<T>(object value) 
    { 
     return (T) Enum.Parse(typeof(T), Enum.GetName(typeof(T), value));    
    } 


    static void Main(string[] args)   
    {    
     Gender g1 = ConvertToEnum<Gender>(0); //Male 
     Gender g2 = ConvertToEnum<Gender>(1); //Female 
     Gender g3 = ConvertToEnum<Gender>(2); //*BANG* exception    
    } 
1

我遇到了這個方法,我用前一陣子使用。

它採用了擴展,並應始終返回enum

public static T ToEnum<T>(this string type, T defaultEnum) 
    { 
     T holder; 
     try 
     { 
      holder = (T)Enum.Parse(typeof(T), type); 
     } 
     catch 
     { 
      holder = defaultEnum; 
     } 
     return holder; 
    } 
+0

即將寫出非常相似的答案,你可以從參數中取出類型 – CMS