如何将泛型类型传递给静态方法

时间:2018-06-14 12:55:58

标签: 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,这需要一个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)
{

///

}

1 个答案:

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