2012-02-16 54 views
0

我已經編寫了一個通用方法來將int轉換爲Enum字符串,從而出現錯誤。請幫助Thanx。從ENUM獲取字符串的通用方法(通過傳遞int值)

public static string GetStringEquiValentOFEnumFromString<T>(int enumVal) 
     where T : struct 
    { 
     if(Enum.IsDefined(typeof(T),enumVal)) 
     { 
      return ((T)enumVal).ToString(); ///Error: Cannot convert type 'int' to 'T' 
     }   
     return null; 
    } 
+0

我敢肯定,這將不會處理合並值標誌枚舉。 – phoog 2012-02-16 22:00:02

回答

0

你會看到這個錯誤,因爲泛型類型參數不能被約束在C#中的enum類型。由於你的約束條件只是說它必須是一個值類型,編譯器不能保證enumVal將被轉換爲T並給出編譯時錯誤。

要解決這個問題,你可以明確的功能定義枚舉類型:

public static string GetStringFromValue(this MyEnum enum, int val) { 
    if (Enum.IsDefined(typeof(MyEnum), val)) { 
     return ((MyEnum) val).ToString(); 
    } 
    return null; 
} 

或者你也可以使用類似喬恩斯基特的UnconstrainedMelody庫,在字節碼級重寫你的代碼執行enum約束(可從另一個組件調用)。

+0

還有另外一個問題,那就是枚舉的類型可能比'int'小。 – phoog 2012-02-16 21:58:32

2

我認爲你可以使用Enum.ToObject

public static string GetStringEquiValentOFEnumFromString<T>(int enumVal) 
    where T : struct 
    { 
     if (Enum.IsDefined(typeof(T), enumVal)) 
     { 
      return Enum.ToObject(typeof (T), enumVal).ToString(); 
     } 
    } 

http://msdn.microsoft.com/en-us/library/system.enum.toobject.aspx

+0

忘了給道具:從它拉出它回答:http://stackoverflow.com/a/29485/437456 – 2012-02-16 21:48:14

0

這應該工作:

public static string GetStringEquiValentOFEnumFromString<T>(int enumVal) 
    where T : struct 
{ 
    if(Enum.IsDefined(typeof(T),enumVal)) 
    { 
     return ((T)(object)enumVal).ToString(); 
    }   
    return null; 
} 
0

公共靜態類StringEnum {

public static string GetStringValue(Enum value) 
    { 
     string output = null; 
     Type type = value.GetType(); 

     FieldInfo fi = type.GetField(value.ToString()); 
     StringValue[] attr = fi.GetCustomAttributes(typeof(StringValue), false) as StringValue[]; 

     if (attr.Length > 0) 
     { 
      output = attr[0].Value; 
     } 
     return output; 
    } 
} 

StringEnum是一個具有(GetStringValue)方法來獲取字符串值的類。 (StringValue(「Pharmacy Cards」)] Pharmacy_Cards = 1,[StringValue(「Prospect Campaign」)] Prospect_Campaign = 2,[StringValue(「展會/廣告「)] Tradeshow_Advertising = 3}

其一個枚舉...

串項= StringEnum.GetStringValue((Enumeration.CampaignRequestType)updateRequestStatus.RequestType_Code);

這裏(Enumeration.CampaignRequestType)是我的枚舉和updateRequestStatus.RequestType_Code是數據庫領域的int類型

我投int值枚舉類型