采用任何枚举的方法[重复]
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 等继承?只是想知道为什么不...以上是关于采用任何枚举的方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章