【问题标题】: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(我希望能够传入任何枚举对象)

【问题讨论】:

  • 按参数类型重载方法好像会更容易更有序。
  • 好吧,我正在尝试减少代码......而且我有理由这样做......

标签: c#


【解决方案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 等继承?只是想知道为什么不...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多