2009-02-11 107 views

回答

2

最近的约束是结构:

C类< E>其中E:/ * *枚举/结构

如果您需要确保它是一个枚举使用typeof运算(E).IsEnum

5

您不能直接在C#中执行此操作 - 枚举类型不可用作约束。一个选项(蹩脚的)是使用类型初始值设定项(静态构造函数)在运行时进行检查。它会在运行时使用不合适的类型停止它,但不会在编译时。

class Foo<T> where T : struct { 
    static Foo() { 
     if (!typeof(T).IsEnum) { 
      throw new InvalidOperationException("Can only use enums"); 
     } 
    } 
    public static void Bar() { } 
} 
enum MyEnum { A, B, C } 
static void Main() { 
    Foo<MyEnum>.Bar(); // fine 
    Foo<int>.Bar(); // error 
} 
+0

这可能是.net有时令人沮丧的局限 - 特别是因为Enum不是唯一被排除在外的类型在约束中使用 - 也是:System.Delegate,System.Array和System.ValueType。 – LBushkin 2009-06-12 17:58:30

0

既然你说你不能使用的限制,它来到我的脑海里唯一的其他解决方案是使用动态转换,并在运行时检查结果。从使用约束作为解决方案来看,这是最差的。但是,here您可以找到可能有所帮助的文章。

相关问题