Класс Language не является перечислением в терминологии C #. Это обычный класс с открытыми строковыми полями const. ROWLEX намеренно генерирует имитирующие перечисление классы вместо собственных перечислений по 2 причинам:
- Значением собственного перечисления C # является целое число, в то время как открытое поле const может принимать URI экземпляра класса OWL.
- Класс может иметь одну дополнительную общедоступную статическую строку, которая является "URI", которая последовательно представляет URI класса для каждого отдельного сгенерированного ROWLEX класса.
Это был фон. Если я правильно понял ваш вопрос, у вас возникла проблема, связывающая выбранное имя, отображаемое в раскрывающемся списке, с URI, и вы хотели использовать положение элемента внутри созданного вами массива. Я бы так не поступил. DropDownLists обычно имеют поля ID и Value для каждого элемента списка (могут называться по-разному в зависимости от компонента). Ожидается, что идентификатор будет уникальным объектом, а значение должно содержать что-то удобочитаемое для человека. Установите идентификатор с URI поля «enum» и значение, как вы сделали. Итак, вот как вы заполняете свой выпадающий список:
System.Reflection.FieldInfo[] resLanFields = typeof(Language).GetFields();
foreach(FieldInfo field in resLanFields)
{
ListItem item = new ListItem();
item.ID = field.GetValue(null); // takes the URI value of the const field
item.Value = field.Name; // takes the name of the const field
dropDownList_lang.AddItem(item);
}
И когда пользователь сделал свой выбор, вот как вы читаете результат:
learningResource.hasLanguage = (string) dropDownList_lang.SelectedItem.ID;
Поскольку в классе enow-imitating класса ROWLEX (string => Language) реализован оператор неявного приведения типов, вы можете смело устанавливать свой тройной субъект в виде строки. Должен компилироваться без проблем. Просто, не правда ли?
;)