C# 开放泛型类型比较。 Generic<> 是 Generic<T> 的 "parent"?

C# Open generic type comparison. Generic<> is "parent" of Generic<T>?

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

某处我必须检查某些数据以查看它是否是 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<>) 之间的关系?

你所说的开放泛型类型被称为泛型类型定义:

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

}