Проблема с циклическим переключением значений класса Enum
-
06-09-2019 - |
Вопрос
Я работаю над семантическим веб-приложением, в котором используется сборка онтологии.Я использовал 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.
Мне было интересно, поможет ли мне кто-нибудь в этой проблеме.
Решение
Как говорится в ошибке, это не настоящее перечисление.
Похоже, вам нужно подумать:
var fields = typeof(Language).GetFields(BindingFlags.Static
| BindingFlags.Public);
foreach (string item in fields.Select(field => field.GetValue(null)))
{
// ...
}
Это предполагает, что в этом типе нет других общедоступных статических полей.Вы всегда можете фильтровать по типу и т. д.