Как преобразовать перечисление в список < SelectListItem>?

У меня есть веб-страница asp.net-mvc, и я хочу показать выпадающий список, основанный на перечислении. Я хочу показать текст каждого элемента перечисления и идентификатор, являющийся значением int, с которым связано перечисление. Есть ли какой-нибудь элегантный способ сделать это преобразование?

63
задан John Farrell 16 August 2010 в 01:36
поделиться

3 ответа

Вы можете использовать LINQ:

Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
    Text = v.ToString(),
    Value = ((int)v).ToString()
}).ToList();
120
ответ дан 24 November 2019 в 16:11
поделиться

Вы можете использовать Enum.GetNames () , чтобы получить массив строк, содержащий имена элементов перечисления. Если названия ваших предметов удобны для пользователя, то этого, вероятно, будет достаточно. В противном случае вы можете создать свой собственный метод GetName () , который будет возвращать красивое имя для каждого элемента.

ИЛИ - если перечисление никогда (или редко) изменится, вы можете просто создать метод, который напрямую добавляет жестко запрограммированные элементы в раскрывающийся список. Это, вероятно, более эффективно (если это важно для вас).

4
ответ дан 24 November 2019 в 16:11
поделиться

Теперь я использовал Tuple , но вы можете преобразовать это, чтобы использовать что угодно:

var values = Enum.GetValues(typeof(DayOfWeek))
    .Cast<DayOfWeek>()
    .Select(d => Tuple.Create(((int)d).ToString(), d.ToString()))
    .ToList()
2
ответ дан 24 November 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: