我正在尝试使用枚举来提供我的下拉列表,但我无法将其转换为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?)
我至少走在正确的道路上吗?还有其他转换方式吗?
答案 0 :(得分: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>
,因此通过在LINQ查询中使用实际的SelectListItem
类型而不是匿名类型,它应该可以正常工作。
答案 1 :(得分:0)
这是我用的 很确定我把它从这个网站上删了,但我找不到帖子了 然后只需将DisplayMemberPath作为值绑定到Dictionary 有什么好处是你在Key中有实际的枚举
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;
}