C#:将枚举类型作为参数传递
Posted
技术标签:
【中文标题】C#:将枚举类型作为参数传递【英文标题】:C#: Passing enum type as argument 【发布时间】:2011-03-02 13:47:11 【问题描述】:我尝试使用以下代码将枚举转换为通用列表
public static List<T> ToList<T>(Type t) where T : struct
return Enum.GetValues(typeof(T)).Cast<T>().ToList();
它成功编译了。
我尝试使用以下代码调用上述方法
enum Fruit
apple = 1,
orange = 2,
banana = 3
;
private List<Fruit> GetFruitList()
List<Fruit> allFruits = EnumHelper.ToList(Fruit);
return allFruits;
导致如下错误
Compiler Error Message: CS0118: 'default.Fruit' is a 'type' but is used like a 'variable'
所以我确定如何将 Enum 类型作为参数传递。
【问题讨论】:
***Exception 先发现,调用EnumHelper.ToList(Type)时需要引用typeof(Fruit)而不是Fruit 【参考方案1】:public static List<T> ToList<T>() where T : struct
return Enum.GetValues(typeof(T)).Cast<T>().ToList();
enum Fruit
apple = 1,
orange = 2,
banana = 3
;
private List<Fruit> GetFruitList()
List<Fruit> allFruits = EnumHelper.ToList<Fruit>();
return allFruits;
【讨论】:
感谢您的解决方案。我已经试过那个了。但我的问题仍然是如何将枚举类型作为参数传递。【参考方案2】:为什么不这样做:
public static List<T> ToList<T>()
return Enum.GetValues(typeof(T)).Cast<T>().ToList();
【讨论】:
【参考方案3】:List<Fruit> allFruits = EnumHelper.ToList<Fruit>(typeof(Fruit));
【讨论】:
【参考方案4】:松开参数Type t
该类型已作为泛型参数传递,因此您不需要该方法的常规参数。
【讨论】:
【参考方案5】:使用EnumHelper.ToList<Fruit>(typeof(Fruit));
。但是,您可以丢失参数,声明为EnumHelper.ToList<T>()
并使用它EnumHelper.ToList<Fruit>()
。
【讨论】:
第一个选项错误:这实际上会导致“cannot infer type arguments for EnumHelper.ToList”的错误【参考方案6】:要将Type
传递给您的函数,您应该使用以下语法:
EnumHelper.ToList(typeof(Fruit));
【讨论】:
错误答案:这实际上会导致“cannot infer type arguments for EnumHelper.ToList”的错误 我想展示如何将类型作为参数传递,我不应该使用他自己的方法,因为你是对的,泛型参数会有问题。以上是关于C#:将枚举类型作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章