Я пытаюсь использовать перечисление для подачи моего 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?)
Я по крайней мере на правильном пути? Есть ли другие способы конверсии?
Трудно точно знать без более полного примера кода. Но я ожидаю, что это сработает для вас:
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 вместо анонимного типа, он должен работать.
Это то, что я использую
Довольно уверен, что я получил это с этого сайта, но я не могу найти сообщение
Затем просто привяжите словарь к 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;
}