C#打开泛型类型比较。通用<&燃气轮机;是";“家长”;通用的<;T>;?

C#打开泛型类型比较。通用<&燃气轮机;是";“家长”;通用的<;T>;?,c#,generics,comparison,open-generics,C#,Generics,Comparison,Open Generics,我有一个类MyGeneric,以及一些从MyGeneric、MyGeneric、MyGeneric类型创建的缓存数据。。。等等 在某些地方,我必须检查某些数据,看看它是否是MyGeneric,我的代码如下: if (data is MyGeneric<>) { // can't compile // ... do something } if(数据是MyGeneric){//无法编译 //…做点什么 } 或 if(data.GetType()==typeof(MyGene

我有一个类MyGeneric,以及一些从MyGeneric、MyGeneric、MyGeneric类型创建的缓存数据。。。等等

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

if (data is MyGeneric<>) { // can't compile
    // ... do something
}
if(数据是MyGeneric){//无法编译
//…做点什么
}

if(data.GetType()==typeof(MyGeneric)
||typeof(MyGeneric).isAssginableFrom(data.GetType()){
//没有例外,但这些比较都不起作用
}
或者这种愚蠢的实现很有效,但我想扔掉它:

if (data.GetType().Name.StartsWith(typeof(MyGeneric<>).Name) { ... }
if(data.GetType().Name.StartsWith(typeof(MyGeneric.Name){…}
是否有一种方法可以检查实际数据类型和开放泛型类型(MyGeneric)之间的关系?

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

if(data.GetType().GetGenericTypeDefinition()==typeof(MyGeneric))
{
}
您所谓的开放泛型类型称为泛型类型定义:

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

}