我需要指定一个泛型类型应该只接受枚举类型只在关闭类型。任何人都可以建议一种方法来做到这一点,如果约束不起作用?如何将泛型类型的类型参数限制为除使用约束之外的特定类型?
3
A
回答
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您可以找到可能有所帮助的文章。
相关问题
- 1. C#泛型 - 约束的类型参数
- 2. 泛型类型参数的约束
- 3. 如何使用泛型约束类型
- 4. Scala:将泛型类型参数约束为另一个参数的类型
- 5. 约束泛型类型参数的数值类型
- 6. 如何在Swift中将泛型类型约束为另一个泛型类型?
- 7. 斯卡拉 - 约束泛型类型特定类型
- 8. 泛型方法有限制类型参数和类型擦除
- 9. 具有泛型类型约束和继承类型的泛型类定义?
- 10. 指定类型约束上的通用泛型类型
- 11. 摘要泛型类的泛型约束
- 12. 类型约束的Swift泛型数组
- 13. 使用泛型约束的参数类型VS显式类型声明
- 14. C#将泛型类型作为泛型类型参数传递?
- 15. C#运行时将约束泛型类型转换为约束类型
- 16. Ninject - 约束绑定泛型类型
- 17. 将函数泛型参数约束到关联的类型
- 18. 限制泛型类型参数System.Enum
- 19. 限制类型参数在C#泛型
- 20. 如何定义基本类型的泛型类型限制?
- 21. 如何定义实现接口并约束类型参数的泛型类?
- 22. Scala类型:如何限制子类的泛型类型?
- 23. 如何获得泛型类之外的实际泛型参数?
- 24. 使用自由绑定泛型类型作为类型参数
- 25. 如何将类型类型限制为C#中的特定类型子集
- 26. 泛型和类型约束的规则
- 27. 接口的泛型类型约束?
- 28. 类型约束中的泛型
- 29. Autofac约定泛型类型
- 30. 如何使用泛型类型的泛型列表泛型类
顺便说一句 - 你想做什么?如果这是针对使用泛型的“flags”按位运算(一个常见问题),还有另一种选择... – 2009-02-11 10:33:56