Преобразование перечисления в проблему IEnumerable <SelectListItem>

1

Я пытаюсь использовать перечисление для подачи моего Dropdownlist, но мне не удалось преобразовать его в IEnumerable<SelectListItem>

Это код:

EducationStatusEnum[] values = (EducationStatusEnum[])Enum
                                     .GetValues(typeof(EducationStatusEnum));

var list = from value in values
     select new { Value = ((int)value).ToString() , Text = value.ToString()};


studentViewModel.LastEducationStatusList = list;

Это сообщение об ошибке:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>'. An explicit conversion exists (are you missing a cast?)

Я по крайней мере на правильном пути? Есть ли другие способы конверсии?

Теги:
enums
ienumerable

2 ответа

5
Лучший ответ

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

EducationStatusEnum[] values = (EducationStatusEnum[])Enum
                                     .GetValues(typeof(EducationStatusEnum));

var list = from value in values
     select new SelectListItem()
     {
         Value = ((int)value).ToString(),
         Text = value.ToString()
     };

studentViewModel.LastEducationStatusList = list;

Другими словами, из сообщения об ошибке кажется, что единственная проблема здесь в том, что тип перечисления не соответствует типу перечисления, ожидаемому для LastEducationStatusList. В сообщении об ошибке говорится, что он пытается назначить IEnumerable<System.Web.Mvc.SelectListItem>, поэтому, используя фактический тип SelectListItem в запросе LINQ вместо анонимного типа, он должен работать.

0

Это то, что я использую
Довольно уверен, что я получил это с этого сайта, но я не могу найти сообщение
Затем просто привяжите словарь к DisplayMemberPath как значение.
Хорошо, что у вас есть фактическое перечисление в ключе

public static Dictionary<T, string> EnumToDictionary<T>()
    where T : struct
{
    Type enumType = typeof(T);

    // Can't use generic type constraints on value types,
    // so have to do check like this
    if (enumType.BaseType != typeof(Enum))
        throw new ArgumentException("T must be of type System.Enum");

    Dictionary<T, string> enumDL = new Dictionary<T, string>();
    foreach (T enm in Enum.GetValues(enumType))
    {
        string name = Enum.GetName(enumType, enm);
        if (name != null)
        {
            FieldInfo field = enumType.GetField(name);
            if (field != null)
            {
                DescriptionAttribute attr =
                        Attribute.GetCustomAttribute(field,
                            typeof(DescriptionAttribute)) as DescriptionAttribute;
                if (attr != null)
                    name = attr.Description;
            }
        }
        enumDL.Add(enm, name);
    }
    return enumDL;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню