多个约束类型或检查泛型是什么类型

本文关键字:类型 泛型 是什么 检查 约束 | 更新日期: 2023-09-27 18:28:52

我有一个基类需要泛型类型。它可以是EntityObject,也可以是我的自定义类型
我需要一种方法来将基类约束为另一种类型,还需要一种检查Generic是否属于特定类型的方法
当我做if (T is EntityObject)if (typeof(T) is EntityObject)时,它要么说我使用T作为变量,要么说typeof(T)"永远不会是给定的类型"。

多个约束类型或检查泛型是什么类型

您可以使用:

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

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

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

当然,这是一个执行时间检查——在编译时不能有"…之一"约束。根据您的场景,有两个不同名称和约束的公共方法,它们调用一个不受约束的私有方法(它"知道"您有一个合适的类型,因为只从公共方法调用)可能是合适的。

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

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