通过反思,有没有办法实现这个目标?
每个实例从IDictionary<,>
获得IDictionary<int,int>
?
我的意图是:
typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType())
然后&#39; 查询&#39;属于UniqueKeyQuery<Sometype,int>
类型。
我不想比较名称,因为我希望UniqueKeyQuery是可扩展的。
答案 0 :(得分:2)
如果您希望“开放”泛型类型(例如,query
)GetGenericTypeDefinition可以使用:
typeof(UniqueKeyQuery<,>).IsAssignableFrom(
query.GetType().GetGenericTypeDefinition()
)
答案 1 :(得分:1)
你可以尝试
typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType().GetGenericDefitition())
如果它不起作用,你可以使用它(一个应该在静态类中的静态扩展方法)
public static bool IsOrInheritsGenericDefinition(this Type ThisType, Type GenericDefinition, out Type DefinitionWithTypedParameters)
{
DefinitionWithTypedParameters = ThisType;
while (DefinitionWithTypedParameters != null)
{
if (DefinitionWithTypedParameters.IsGenericType)
{
if (DefinitionWithTypedParameters.GetGenericTypeDefinition() == GenericDefinition)
return true;
}
DefinitionWithTypedParameters = DefinitionWithTypedParameters.BaseType;
}
return false;
}
通过以下方式致电:
Type QueryType;
query.GetType().IsOrInheritsGenericDefinition(typeof(UniqueKeyQuery<,>), out QueryType);