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

swc*_*aft 1 c# c#-4.0

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

string val = "namespace_name.enum_name";
Run Code Online (Sandbox Code Playgroud)

我可以使用它来获取枚举类型.

Type myType = Type.GetType(val);
Run Code Online (Sandbox Code Playgroud)

现在我看到myType.Name = actual_enum_name和其他信息,很好.我试图使用此信息获取实际的枚举值,但没有成功.

我已经尝试过使用Enum.Getvalues,但是我在将myType,即System.Type转换为EnumType时遇到困难,这是Enum.Getvalues需要的(?).

我试图根据获得的信息实际创建一个Enum对象并被卡住.

如何从这里获得该枚举的实际字段(成员列表)?

Mat*_*zza 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());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许您构造枚举值的实例,如下所示:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)