我有一个基类,需要一个泛型类型。这可以是EntityObject
或自定义类型的矿。
我需要一种方法来将Base类约束到其他类型,并且我还需要一种方法来检查Generic是否属于某种类型。
当我做if (T is EntityObject)
或if (typeof(T) is EntityObject)
它或者说我使用T作为变量,或者为typeof(T)
我得到它“永远不会是给定类型”。多重约束类型或检查通用是什么类型?
0
A
回答
2
您可以使用:根据您的要求
if (typeof(T) == typeof(EntityObject))
或
if (typeof(EntityObject).IsAssignableFrom(typeof(T)))
。 (有关更多详细信息,请参阅Type.IsAssignableFrom
的文档。)
当然,这是一次执行时间检查 - 在编译时您不能有“一个......”约束。根据你的情况,最好有两个不同名称和约束的公共方法,它们调用一个不受约束的私有方法(由于只从公共方法中调用,“知道”你有适当的类型)。
0
没有办法约束两个不相关的类型。您可能需要一个通用类型(如接口)或受约束泛型类的两个版本。
假设T不受约束,可以使用if (typeof(T).Equals(typeof(EntityObject))) { ... }
来检查T是否属于某种类型。
相关问题
- 1. CodeDom通用类型约束
- 2. 通用类约束其中<T>是约束通用类的类型
- 3. 通用类约束:2种类型
- 4. Scala:通用类类型的约束
- 5. 多种类型约束
- 6. 为什么类型约束不够?
- 7. 为什么我需要在通用子类中重新声明类型约束
- 8. 指定类型约束上的通用泛型类型
- 9. 为什么实现具有类型约束的泛型接口的泛型类需要重复这些约束?
- 10. 使用通用约束与值类型
- 11. 什么是通用类型?
- 12. F#类型约束
- 13. 通用类型的签名约束
- 14. 通用字典上的类型约束
- 15. 类型参数约束是一个类
- 16. 通用类型约束禁止某些类型?
- 17. 指定类型约束约束
- 18. 什么时候在C#中有用的值类型/引用类型约束?
- 19. xsi上的约束或限制:类型
- 20. 泛型类型的构造函数约束或只是检查我的泛型类型构造函数中的约束?
- 21. 型,而不是检查约束
- 22. 检查通用类型
- 23. C#运行时将约束泛型类型转换为约束类型
- 24. 多元数的静态类型约束
- 25. 为什么System.Array不能是类型约束?
- 26. 这个参数类型约束是什么意思?
- 27. 检查泛型类型是
- 28. Haskell“不”类型约束
- 29. 类型参数约束
- 30. Ada无约束类型
如果我想检查的第二种类型实际上是一个基类,这个封面会覆盖吗? T实际上是“MyObject”,但我将检查MyObject继承的“MyBase”。 – 2012-03-22 14:51:07
@ JamesP.Wright'typeof(MyBase).IsAssignableFrom(typeof(T))'应该返回true,如果'T'是'MyBase'的子类 – 2012-03-22 15:09:25