0

我有一个 MyGeneric<T> 类,以及一些从 MyGeneric<string>、MyGeneric<int>、MyGeneric<double>... 等类型创建的缓存数据。

我必须在某个地方检查某些数据以查看它是否是 MyGeneric,我的代码如下:

if (data is MyGeneric<>) { // can't compile
    // ... do something
}

或者

if (data.GetType() == typeof(MyGeneric<>)
    || typeof(MyGeneric<>).isAssginableFrom(data.GetType())) { 
    // no exception but none of these comparison works
}

或者这种愚蠢的实现有效,但我想把它扔掉:

if (data.GetType().Name.StartsWith(typeof(MyGeneric<>).Name) { ... }

有没有办法检查实际数据类型和开放泛型类型 (MyGeneric<>) 之间的关系?

4

1 回答 1

3

您所说的开放泛型类型称为泛型类型定义

if(data.GetType().GetGenericTypeDefinition() == typeof(MyGeneric<>))
{

}
于 2016-04-09T06:13:58.337 回答