【问题标题】:get values(fields) of enum from reflected string representation从反射字符串表示中获取枚举的值(字段)
【发布时间】:2012-08-12 03:20:46
【问题描述】:

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

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 对象,结果卡住了。

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

【问题讨论】:

  • 你尝试过使用 Enum.TryParse
  • 当你说你“在转换 myType 时遇到了困难”,你想把它转换成什么?
  • 编译器是否显示了一些错误?
  • @Coding Gorilla:我尝试从 System.Type 转换为枚举类型。
  • @HatSoft:不,我没有,你能给我举个例子吗?我试过 Enum.Parse(Type.GetType("enumname"), myType.Name) 失败了。

标签: c# c#-4.0


【解决方案1】:

这应该可以正常工作,不需要转换。 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);
        }
    }
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-18
      • 2020-07-11
      • 1970-01-01
      • 2017-12-06
      • 2021-04-04
      • 1970-01-01
      • 2022-01-20
      • 2017-08-01
      相关资源
      最近更新 更多