【发布时间】:2013-08-06 01:31:30
【问题描述】:
我有一个返回所有枚举值的方法(但这并不重要)。重要的是它接受T 并返回IEnumerable<T>。
private static IEnumerable<T> GetAllEnumValues<T>(T ob)
{
return System.Enum.GetValues(ob.GetType()).Cast<T>();
}
或
private static IEnumerable<T> GetAllEnumValues<T>(T ob)
{
foreach (var info in ob.GetType().GetFields(BindingFlags.Public | BindingFlags.Static))
{
yield return (T) info.GetRawConstantValue();
}
}
要使用此方法,您需要使用类的实例调用它 - 在这种情况下,使用我们要探索的枚举中的任何值:
GetAllEnumValues( Questions.Good );
我想更改方法的签名以采用System.Type 并能够像这样调用它:
GetAllEnumValues( typeof(Questions ));
我不知道签名会是什么样子:
private static IEnumerable<?> GetAllEnumValues<?>(System.Type type)
以及如何应用强制转换或Convert.ChangeType 来实现这一点。
我不想打电话给GetAllEnumValues<Questions>( typeof(Questions ));
这可能吗?
【问题讨论】:
标签: c# generics casting ienumerable