我正在尝试将枚举类型转换为列表,就像这个例子中所提到的一样。
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: 提供的类型必须是枚举。
参数名称:enumType
在这一行上:
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
{
Text = v.ToString(),
Value = Convert.ToInt32(v).ToString()
}).ToList();
我需要在代码中修复什么问题,才能避免运行时错误?
where ...
子句。将其添加到您的方法中:EnumDropDownListFor(...) where ....
- Marc