2

在整个反思过程中,有没有办法实现这一点?从
获取,每个实例?IDictionary<,>IDictionary<int,int>

我的意图是:

 typeof(UniqueKeyQuery<,>).IsAssignableFrom(query.GetType())

而“查询”是类型UniqueKeyQuery<Sometype,int>
我不想比较名称,因为我希望 UniqueKeyQuery 是可扩展的。

4

2 回答 2

2

如果您想要“开放”泛型类型(例如,queryGetGenericTypeDefinition将起作用:

 typeof(UniqueKeyQuery<,>).IsAssignableFrom(
     query.GetType().GetGenericTypeDefinition()
 )
于 2013-06-20T16:09:08.280 回答
1

你可以试试

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);
于 2013-06-20T16:09:46.680 回答