多个约束类型或检查Generic是什么类型的?

时间:2012-03-22 14:34:42

标签: c# generics

我有一个需要Generic类型的Base类。这可以是EntityObject或我的自定义类型 我需要一种方法将Base类约束为EITHER类型,我还需要一种方法来检查Generic是否属于某种类型。
当我执行if (T is EntityObject)if (typeof(T) is EntityObject)时,它或者说我使用T作为变量,或者typeof(T)我得到它“将永远不会是给定类型”。

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

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

取决于您的要求。 (有关详细信息,请参阅Type.IsAssignableFrom的文档。)

当然,这是一个执行时检查 - 在编译时你不能有“一个......”约束。根据您的场景,有两个不同命名和约束的公共方法可能适合调用一个不受约束的私有方法(由于只是从公共方法调用,它“知道”您有一个合适的类型)。

答案 1 :(得分:0)

没有办法限制两种不相关的类型。您需要一个公共类型(如接口)或两个版本的受约束泛型类。

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