Eri*_*rix 4 c# generics types .net-4.0
这里有几个类似的问题,但似乎没有一个问题能够完全回答我的问题.
我想创建一个采用Enum Type的方法,并为UI生成ListItem的List.像这样的签名的东西可以工作:
public static List<ListItem> ListItemListFromEnum(Type t)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但我宁愿不接受任何类型(t必须是Enum类型)所以我可以做这样的事情:
public static List<ListItem> ListItemListFromEnum(Enum e)
{
Type t = e.GetType();
}
Run Code Online (Sandbox Code Playgroud)
并只是将正确类型的枚举传递给方法.这样可以正常工作,但我真的想要一个Type参数(如我的第一个例子),但强制它是一个Enum类型.
这可能吗?有没有办法用泛型做到这一点?谢谢
如果你的意思是你想要制作这样的方法:
public static List<ListItem> ListItemsListFromEnum<T>() where T:Enum
Run Code Online (Sandbox Code Playgroud)
那么这在C#中是不可能的.然而,Jon Skeet整合了Unconstrained Melody,它增加了一些IL后期处理的功能.似乎C#编译器遵循这些约束,它只是不能声明它们.
也就是说,如果那不是您想要的,您可以按Type
原样接受并检查IsEnum
房产.如果是,请抛出异常.
public static List<ListItem> ListItemListFromEnum(Type t)
{
if (!t.IsEnum)
{
throw new ArgumentException("Type must be an enumeration", "t");
}
}
Run Code Online (Sandbox Code Playgroud)
同样,您也可以使用泛型:
public static List<ListItem> ListItemListFromEnum<T>()
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("Type must be an enumeration", "t");
}
}
Run Code Online (Sandbox Code Playgroud)
唯一不利的是,您将获得运行时异常而不是编译时异常.
归档时间: |
|
查看次数: |
440 次 |
最近记录: |