我需要指定一个泛型类型应该只接受枚举类型只在关闭类型。任何人都可以建议一种方法来做到这一点,如果约束不起作用?如何将泛型类型的类型参数限制为除使用约束之外的特定类型?
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. Scala:将泛型类型参数约束为另一个参数的类型
- 3. 约束泛型类型参数的数值类型
- 4. 斯卡拉 - 约束泛型类型特定类型
- 5. 指定类型约束上的通用泛型类型
- 6. 类型约束的Swift泛型数组
- 7. 使用泛型约束的参数类型VS显式类型声明
- 8. C#运行时将约束泛型类型转换为约束类型
- 9. 将函数泛型参数约束到关联的类型
- 10. 限制类型参数在C#泛型
- 11. 如何定义基本类型的泛型类型限制?
- 12. 如何定义实现接口并约束类型参数的泛型类?
- 13. 如何获得泛型类之外的实际泛型参数?
- 14. 使用自由绑定泛型类型作为类型参数
- 15. 类型约束中的泛型
- 16. 接口的泛型类型约束?
- 17. 泛型和类型约束的规则
- 18. 如何使用泛型类型的泛型列表泛型类
- 19. 如何解决C#中泛型类型约束的局限性?
- 20. 如何在Swift中将类型(符合约束条件)类型化为泛型?
- 21. 使用泛型类型参数类
- 22. 泛型结构 - 如何约束类型参数C#
- 23. 泛型类型作为泛型类型参数
- 24. 泛型中的类型别名类型约束
- 25. 将C#类型参数约束为一系列基元类型?
- 26. 如何将泛型类型限制为不扩展类?
- 27. 如何为泛型提供对引用类型的约束?
- 28. 在Swift中,如何在类型参数受协议约束的泛型类中使用关联类型?
- 29. c#泛型错误:方法的类型参数'T'的约束......?
- 30. 反映了泛型类型约束
顺便说一句 - 你想做什么?如果这是针对使用泛型的“flags”按位运算(一个常见问题),还有另一种选择... – 2009-02-11 10:33:56