能否根据字符串名称加载枚举类型?

5
“好的,我觉得标题可能不太准确...但是让我来翻译一下:”
“我有一个类里面大约有40个枚举。例如:”
    Class Hoohoo
    {

       public enum aaa : short
       {
          a = 0,
          b = 3
       }

      public enum bbb : short
      {
        a = 0,
        b = 3
      }

      public enum ccc : short
      {
        a = 0,
        b = 3
      }
}

现在假设我有一个字符串和值的字典,每个字符串都是上述枚举类型的名称:
Dictionary<string,short>{"aaa":0,"bbb":3,"ccc":0}

我需要将“aaa”更改为HooBoo.aaa以查找0。由于枚举是静态的,似乎找不到方法来实现这一点。否则,我将不得不为每个枚举编写一个方法来将字符串与之关联。虽然我可以做到这一点,但需要编写大量代码。

谢谢, Cooter
4个回答

4

您需要使用反射来获取底层枚举类型:

Type t = typeof(Hoohoo);
Type enumType = t.GetNestedType("aaa");
string enumName = Enum.GetName(enumType, 0);

如果你想获取实际的枚举值,可以使用以下方式:

var enumValue = Enum.Parse(enumName, enumType);

2
使用
aaa myEnum =(aaa) Enum.Parse(typeof(aaa), "a");

0

你想将一个字符串转换为枚举类型?这个 可以帮助。


0

请记住,Enum.Parse 不是强类型的... 我认为这将是您场景中的一个真正限制。正如您从 Ngu 的示例中看到的那样,您必须对输出进行转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接