在整个反思过程中,有没有办法实现这一点?从
获取,每个实例?IDictionary<,>
IDictionary<int,int>
我的意图是:
typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType())
而“查询”是类型UniqueKeyQuery<Sometype,int>
。
我不想比较名称,因为我希望 UniqueKeyQuery 是可扩展的。
在整个反思过程中,有没有办法实现这一点?从
获取,每个实例?IDictionary<,>
IDictionary<int,int>
我的意图是:
typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType())
而“查询”是类型UniqueKeyQuery<Sometype,int>
。
我不想比较名称,因为我希望 UniqueKeyQuery 是可扩展的。
如果您想要“开放”泛型类型(例如,query
)GetGenericTypeDefinition将起作用:
typeof(UniqueKeyQuery<,>).IsAssignableFrom(
query.GetType().GetGenericTypeDefinition()
)
你可以试试
typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType().GetGenericDefitition())
如果它不起作用,您可以使用this(应该在静态类中的静态扩展方法)
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);