Можно ли загрузить Enum на основе имени строки? - PullRequest
5 голосов
/ 25 марта 2010

ОК, я не думаю, что название говорит об этом правильно ... но здесь идет:

У меня есть класс с 40 Enums. то есть:

    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. Кажется, я не могу найти способ сделать это, поскольку enum статичен. В противном случае мне придется написать метод для каждого перечисления, чтобы связать строку с ним. Я могу сделать это, но это код, который нужно написать.

Спасибо, Cooter

Ответы [ 4 ]

4 голосов
/ 25 марта 2010

Вы должны будете использовать Reflection, чтобы получить базовый тип перечисления:

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

Если вы хотите получить фактическое значение перечисления, вы можете использовать:

var enumValue = Enum.Parse(enumName, enumType);
2 голосов
/ 25 марта 2010

Использование

aaa myEnum =(aaa) Enum.Parse(typeof(aaa), "a");
0 голосов
/ 25 марта 2010

Просто имейте в виду, что Enum.Parse не является строго типизированным ... Я считаю, что это будет реальным ограничением в вашем сценарии.Как вы можете видеть из примера Нгу, вам нужно будет привести результат.

0 голосов
/ 25 марта 2010

Вы хотите преобразовать строку -> enum? Это должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...