将枚举转换为IEnumerable <selectlistitem> issue </selectlistitem>

时间:2014-12-03 18:20:13

标签: c# .net enums ienumerable

我正在尝试使用枚举来提供我的下拉列表,但我无法将其转换为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?)

我至少走在正确的道路上吗?还有其他转换方式吗?

2 个答案:

答案 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;
}