1

我有一个枚举的字符串表示。

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 对象并陷入困境。

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

4

2 回答 2

8

这应该按原样工作,不需要转换。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);
        }
    }
}
于 2012-08-15T19:40:27.433 回答
0

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

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

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

于 2012-08-15T19:42:19.837 回答