【发布时间】:2015-11-17 11:20:31
【问题描述】:
我正在尝试将枚举转换为 this 示例中提到的列表 例如
Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
Text = v.ToString(),
Value = ((int)v).ToString()
}).ToList();
这项工作,但我想修改它以使用通用枚举
public static List<SelectListItem> GetEnumList<TEnum>(TEnum value)
{
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
{
Text = v.ToString(),
Value = ((int)v).ToString()
}).ToList();
}
但是上面的代码不能编译并给出
无法将类型“TEnum”转换为“int”
换行
Value = ((int)v).ToString()
-
如何修复上面的代码。
-
为什么使用通用枚举而不是普通枚举会出现编译错误
编辑:我已经尝试了线程中的建议,但我得到了进一步的错误:
这是我的完整代码:
public static IHtmlContent EnumDropDownListFor<TModel, TResult,TEnum>(
this IHtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TResult>> expression,
TEnum enumValue,
string optionLabel)
{
return htmlHelper.DropDownListFor(expression, (IEnumerable<SelectListItem>)GetEnumList(enumValue), optionLabel);
}
public static List<SelectListItem> GetEnumList<TEnum>(TEnum value)
{
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
{
Text = v.ToString(),
Value = Convert.ToInt32(v).ToString()
}).ToList();
}
但我得到一个运行时错误
ArgumentException:提供的类型必须是枚举。
参数名称:枚举类型
上线
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
{
Text = v.ToString(),
Value = Convert.ToInt32(v).ToString()
}).ToList();
我需要在代码中修复什么才能避免出现运行时错误。
【问题讨论】:
-
您是否尝试将枚举表示的 int 分配给 Value 属性?
-
先将 TEnum 转换为枚举
-
重要的是伊万回答中的
where ...子句。将其添加到您的方法中:EnumDropDownListFor(...) where ....