c# - 如何将泛型类型传递给静态方法
问题描述
我有一个通用方法,它将返回一个从枚举填充的选择列表。
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
,这需要一个枚举。如何传递当前类型而不是像我所做的那样对类型进行硬编码。所以如果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)
{
///
}
解决方案
不幸的是,枚举没有通用约束——至少在C#7.3之前没有。所以以下是不可能的:
void SoSomething<T>(T myEnum) where T: Enum { }
您可以添加另一个约束,如此处所述:
void SoSomething<T>(T myEnum) where T: struct, IConvertible{ }
但是,这对您没有多大帮助。
但是,在您的情况下,根本不需要强制转换,因为您的方法参数是Enum
. 所以你可以简单地e
转换为Enum
:
return (Enum.GetValues(typeof(T)).Cast<Enum>().Select(e => new SelectListItem {
Text = EnumExtensions.GetEnumDescription(e),
Value = Convert.ToInt32(e).ToString()
})).ToList();
Bw 知道就投到Enum
。否则会出现以下错误:
无法将类型转换
int
为System.Enum
推荐阅读
- django - 使用 Django 模型在运行时动态生成 SQL 列
- python - Wagtail:PageChooserPanel 未显示
- javascript - 为初学者安装 Javascript 插件
- javascript - 如何使用 CSS 为动态创建的元素设置样式
- ios - Firebase 推送通知负载中的 JSON 字典在 iOS 上被读取为字符串
- javascript - 如何在我的 react js 项目中包含一个外部 javascript 库?
- javascript - 在传单地图上添加多个弹出窗口而不重叠
- javascript - 我的游戏有性能泄漏,我找不到
- asp.net-mvc - Application Insights Cookie - 覆盖值
- javascript - 如何根据使用数组传入 Kendo Grid 的 Id 在 MVC 应用程序中返回数据?