2012-03-22 69 views
0

我有一个基类,需要一个泛型类型。这可以是EntityObject或自定义类型的矿。
我需要一种方法来将Base类约束到其他类型,并且我还需要一种方法来检查Generic是否属于某种类型。
当我做if (T is EntityObject)if (typeof(T) is EntityObject)它或者说我使用T作为变量,或者为typeof(T)我得到它“永远不会是给定类型”。多重约束类型或检查通用是什么类型?

回答

2

您可以使用:根据您的要求

if (typeof(T) == typeof(EntityObject)) 

if (typeof(EntityObject).IsAssignableFrom(typeof(T))) 

。 (有关更多详细信息,请参阅Type.IsAssignableFrom的文档。)

当然,这是一次执行时间检查 - 在编译时您不能有“一个......”约束。根据你的情况,最好有两个不同名称和约束的公共方法,它们调用一个不受约束的私有方法(由于只从公共方法中调用,“知道”你有适当的类型)。

+0

如果我想检查的第二种类型实际上是一个基类,这个封面会覆盖吗? T实际上是“MyObject”,但我将检查MyObject继承的“MyBase”。 – 2012-03-22 14:51:07

+0

@ JamesP.Wright'typeof(MyBase).IsAssignableFrom(typeof(T))'应该返回true,如果'T'是'MyBase'的子类 – 2012-03-22 15:09:25

0

没有办法约束两个不相关的类型。您可能需要一个通用类型(如接口)或受约束泛型类的两个版本。

假设T不受约束,可以使用if (typeof(T).Equals(typeof(EntityObject))) { ... }来检查T是否属于某种类型。