从反射的字符串表示中获取枚举的值(字段)

时间:2012-08-15 19:31:18

标签: c# c#-4.0

我有一个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对象并被卡住。

如何从此处获取该枚举的实际字段(成员列表)?

2 个答案:

答案 0 :(得分:6)

这应该按原样运行,不需要转换。 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);
        }
    }
}

答案 1 :(得分:0)

假设我有一个枚举ContactNumberType然后使用

来获取值
string[] names = Enum.GetValues(typeof(ContactNumberType));

因为GetValues()方法返回一个数组