C#打开泛型类型比较。通用&LT;&GT;是父母&#34;通用<t>?

时间:2016-04-09 04:26:37

标签: c# generics comparison open-generics

我有一个类MyGeneric&lt; T&gt;,以及一些根据MyGeneric&lt; string&gt;,MyGeneric&lt; int&gt;,MyGeneric&lt; double&gt; ...等创建的缓存数据。

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

1 个答案:

答案 0 :(得分:2)

您所谓的开放式通用类型称为泛型类型定义

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

}