Проблемы с циклическим циклом значений класса Enum

Я работаю над семантическим веб-приложением, в котором используется сборка онтологии. Я использовал Rowlex OWLGrinder для преобразования OWL в сборку.

В онтологии есть несколько классов, имеющих индивидов, которые преобразованы в классы Enum, содержащие некоторые константы в сборках .dll. Например, класс OWL с именем Language с индивидуальным именем English будет преобразован в класс с именем Language, содержащий константу English. Language.English - это строка, содержащая URI, указанный для человека в онтологии.

http://img5.imageshack.us/img5/9308/73263054.jpg http://img5.imageshack.us/img5/2246/11461238.jpg

В этом контексте я не могу найти способ переключаться между константами класса перечисления. Например, используя что-то вроде этого:

    foreach (string item in Enum.GetNames(typeof(Language)))
    {

    }

этот код выдает исключение, в котором говорится, что Language не является Enum.

Мне было интересно, поможет ли мне кто-нибудь в этой проблеме.


person Ehsan    schedule 02.06.2009    source источник


Ответы (1)


Как говорится в ошибке, это не настоящее перечисление.

Похоже, вам нужно отражение:

var fields = typeof(Language).GetFields(BindingFlags.Static 
                                        | BindingFlags.Public);
foreach (string item in fields.Select(field => field.GetValue(null)))
{
     // ...
}

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

person Jon Skeet    schedule 02.06.2009
comment
Большое спасибо, сэр. Ваш полезный ответ только что решил мою проблему. - person Ehsan; 03.06.2009