2012-08-15 57 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