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&lt;Fruit&gt;(typeof(Fruit));。但是,您可以丢失参数,声明为EnumHelper.ToList&lt;T&gt;() 并使用它EnumHelper.ToList&lt;Fruit&gt;()

【讨论】:

第一个选项错误:这实际上会导致“cannot infer type arguments for EnumHelper.ToList”的错误【参考方案6】:

要将Type 传递给您的函数,您应该使用以下语法:

 EnumHelper.ToList(typeof(Fruit));

【讨论】:

错误答案:这实际上会导致“cannot infer type arguments for EnumHelper.ToList”的错误 我想展示如何将类型作为参数传递,我不应该使用他自己的方法,因为你是对的,泛型参数会有问题。

以上是关于C#:将枚举类型作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

将枚举类型作为可选参数传递[重复]

在 C# 中仅将类型作为参数传递

GraphQL - 将枚举值作为参数直接传递给突变?

可以在 Swift 中将枚举类型名称作为参数传递吗?

在打字稿中将枚举类型作为参数传递

C#如何将类型Type作为泛型T的参数T传递