2012-08-15 58 views
1

我有一個枚舉的字符串表示形式。從反射的字符串表示中獲取enum的值(字段)

string val = "namespace_name.enum_name"; 

我可以用它來獲取枚舉類型。

Type myType = Type.GetType(val); 

現在我看到myType.Name = actual_enum_name和其他信息,很好。 我試圖使用這些信息獲得實際的枚舉值,但沒有成功。

我已經嘗試使用Enum.Getvalues,但是我被困在轉換myType,這是System.Type EnumType,這是什麼Enum.Getvalues需要(?)。

我試圖根據獲得的信息實際創建一個Enum對象並卡住。

如何從這裏獲得該枚舉的實際字段(成員列表)?

+0

您是否試過使用Enum.TryParse – HatSoft 2012-08-15 19:33:47

+0

當你說你「被困在轉換myType」你想把它轉換成什麼? – CodingGorilla 2012-08-15 19:35:24

+0

編譯器顯示有一些錯誤嗎? – 2012-08-15 19:35:59

回答

5

這應該是原樣,不需要轉換。 Enum.GetValues()需要Type。下面的代碼工作。

namespace enumtest 
{ 
    public enum Mine 
    { 
     data1, 
     data2 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Type myenum = Type.GetType("enumtest.Mine"); 

      foreach (var curr in Enum.GetValues(myenum)) 
      { 
       Console.WriteLine(curr.ToString()); 
      } 
     } 
    } 
} 

這使您可以構建一個枚舉值的情況是這樣的:

namespace enumtest 
{ 
    public enum Mine 
    { 
     data1, 
     data2 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Type myenum = Type.GetType("enumtest.Mine"); 

      // Let's create an instance now 
      var values = Enum.GetValues(myenum); 
      var firstValue = values.GetValue(0); 
      Mine enumInstance = (Mine)Enum.Parse(myenum, firstValue.ToString()); 

      Console.WriteLine("I have an instance of the enum! {0}", enumInstance); 
     } 
    } 
} 
0

假設我有一個枚舉ContactNumberType然後獲取值使用

string[] names = Enum.GetValues(typeof(ContactNumberType)); 

因爲GetValues()方法返回一個array