我有一个通用方法,它将返回从枚举中填充的选择列表。
public static IEnumerable<SelectListItem> GetGenericEnumSelectList<T>()
{
return (Enum.GetValues(typeof(T)).Cast<int>().Select(e => new SelectListItem() { Text = EnumExtensions.GetEnumDescription((ProductsEnum)e) , Value = e.ToString() })).ToList();
}
我已经调用了一个静态方法,我也调用了GetEnumDescription
,这需要一个Enum。如何传递当前类型而不是像我所做的那样对类型进行硬编码。因此,如果T
是不同类型的枚举,那么它将是通用的。
类似的东西:
public static IEnumerable<SelectListItem> GetGenericEnumSelectList<T>()
{
return (Enum.GetValues(typeof(T)).Cast<int>().Select(e => new SelectListItem() { Text = EnumExtensions.GetEnumDescription((typeof(T))e) , Value = e.ToString() })).ToList();
}
修改
GetEnumDescription
的签名
public static string GetEnumDescription(Enum value)
{
///
}
答案 0 :(得分:3)
遗憾的是,枚举没有通用约束 - 至少在C#7.3之前没有。所以以下是不可能的:
filterEvent
您可以添加另一个约束here:
void SoSomething<T>(T myEnum) where T: Enum { }
然而,这对你没有多大帮助。
但是在你的情况下根本不需要施放,因为你的方法参数是void SoSomething<T>(T myEnum) where T: struct, IConvertible{ }
。因此,您只需将Enum
转换为e
:
Enum
Bw知道对return (Enum.GetValues(typeof(T)).Cast<Enum>().Select(e => new SelectListItem {
Text = EnumExtensions.GetEnumDescription(e),
Value = Convert.ToInt32(e).ToString()
})).ToList();
的演员表。否则会出现以下错误:
无法将
Enum
类型转换为int