采用任何枚举的方法[重复]

Posted

技术标签:

【中文标题】采用任何枚举的方法[重复]【英文标题】:Method to take in any Enum [duplicate] 【发布时间】:2012-10-22 18:47:33 【问题描述】:

可能重复:Create Generic method constraining T to an Enum

是否可以创建一个接受任何枚举的通用方法?然后,我将检查传入的类型,首先确保它是一个已通过的枚举(或者我可以通过方法定义自然地强制执行它吗?)其次,如果它是一个枚举,我将有一堆 case 语句来做一些事情基于传递的枚举类型。因此,例如,我可以将 CompanyColumns、PayColumns 等作为枚举传递给它。我的方法需要能够采用这样的任何枚举,然后允许我在内部案例语句中使用枚举。

public static DbType GetColumnDataType(我希望能够传入任何枚举对象)

【问题讨论】:

按参数类型重载方法好像会更容易更有序。 好吧,我正在尝试减少代码......而且我有理由这样做...... 【参考方案1】:
public static void MyFunction<T>(T en) where T: IComparable, IFormattable, IConvertible

    if (!typeof(T).IsEnum)
        throw new ArgumentException("en must be enum type");
    // implementation

【讨论】:

谢谢。因此,如果我想在 case 语句中使用枚举,我尝试这样做,不确定如何 switch ((enum)T)【参考方案2】:

试试这个:

public static DbType GetColumnDataType(Enum en)...

这不是通用的,但效果很好。

如果您想要通用,您可以执行以下操作:

public DbType GetColumnDataType<T>(T en)

    Type t = n.getType();
    if (!t.isEnum)
    
      //through exception 
    

【讨论】:

所以你没有从 IComparable 等继承?只是想知道为什么不...

以上是关于采用任何枚举的方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将枚举值作为参数的通用 C# 方法[重复]

无法在通用方法中将整数转换为枚举 [重复]

枚举有重复元素的排列的两种方法

Java连载81-枚举类型,生成五个不重复的随机数,集合简介

将任何值解析为枚举[重复]

任何人都知道缺少枚举通用约束的好方法吗?