2012-09-13 34 views
6

我想分配一個字符串給一個枚舉。類似下面的例子:如何將字符串分配給枚舉而不是C#中的整數值?

enum MyEnum 
    { 
     frist = "First Value", 
     second = "Second Value", 
     third = "Third Value" 
    } 

所以,我可以有這樣的事情在我的代碼:

MyEnum enumVar = MyEnum.first; 
... 
string enumValue = EnumVar.ToString();//returns "First Value" 

在傳統的方法,當我創建一個枚舉的toString()方法將返回枚舉名稱而不是它的值。所以這是不可取的,因爲我正在尋找一種方法來分配一個字符串值,然後從一個枚舉中獲取該字符串值。

+8

http://stackoverflow.com/questions/3501966/enums-with-string-values-and-finding-enum-by-value?rq=1 –

+0

你想,對於什麼? –

+0

@RaphaelAlthaus:你會發布這個答案嗎? – Breeze

回答

16

您可以在您的枚舉中添加一個Description屬性。

enum MyEnum 
    { 
     [Description("First Value")] 
     frist, 
     [Description("Second Value")] 
     second, 
     [Description("Third Value")] 
     third, 
    } 

然後有一種方法可以返回給您說明。

public static string GetEnumDescription(Enum value) 
     { 
      FieldInfo fi = value.GetType().GetField(value.ToString()); 

      DescriptionAttribute[] attributes = 
       (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 

      if (attributes != null && attributes.Length > 0) 
       return attributes[0].Description; 
      else 
       return value.ToString(); 
     } 

然後,你可以這樣做:

MyEnum enumVar = MyEnum.frist; 
    string value = GetEnumDescription(enumVar); 

值將舉辦 「第一個值」

您可能會看到:Associating Strings with enums in C#

+0

非常感謝:)其真正乾淨,正是我以後:) – Breeze

+0

@Hossein,不客氣 – Habib

+0

不錯,不知道這個。 +1。 –

5

不能枚舉值總是整數

你能來最接近的是通過一組靜態屬性

static class MyValues 
{ 
    public static readonly string First = "First Value"; 
    public static readonly string Second = "Second Value"; 
    public static readonly string Third = "Third Value"; 
} 
+1

不一定,除'char'之外的任何整數類型都是有效的。默認是'int' – Dervall

+2

@Dervall我沒有寫int但是整數(不是C#中的一個類型,而是一個英文單詞) –

+0

const string會這樣做好嗎?因爲const是靜態的,只能同時讀取。我對嗎? – Breeze

1

你不能做到這一點的靜態類。 enum s基於整數,而不是字符串。

0

經批准的類型枚舉是字節,爲sbyte,簡短,ushort,int,uint,long或ulong。 所以像一個字符串你可以的唯一事情是

枚舉MyEnum { 第一,第二 , 第三 }

MyEnum.first.ToString();

或類似的使用反射,並使用描述作爲屬性的枚舉字段。

0
enum MyEnum 
{ 
    FirstValue, //Default Value will be 0 
    SecondValue, // 1 
    ThirdValue // 2 
} 

string str1 = Enum.GetName(typeof(MyEnum), 0); //will return FirstValue 
string str2 = Enum.GetName(typeof(MyEnum), MyEnum.SecondValue); //SecondValue 

如果您需要像空格等完整字符串,您需要通過添加描述方法。 否則我推薦創建一個查找字典。

 string value = MyLookupTable.GetValue(1); // First Value 
    value = MyLookupTable.GetValue(2); // Second Value 
    value = MyLookupTable.GetValue(3); // Third Value 

class MyLookupTable 
{ 
    private static Dictionary<int, string> lookupValue = null; 

    private MyLookupTable() {} 

    public static string GetValue(int key) 
    { 
     if (lookupValue == null || lookupValue.Count == 0) 
      AddValues(); 

     if (lookupValue.ContainsKey(key)) 
      return lookupValue[key]; 
     else 
      return string.Empty; // throw exception 
    } 

    private static void AddValues() 
    { 
     if (lookupValue == null) 
     { 
      lookupValue = new Dictionary<int, string>(); 
      lookupValue.Add(1, "First Value"); 
      lookupValue.Add(2, "Second Value"); 
      lookupValue.Add(3, "Third Value"); 
     } 
    } 
} 
相關問題