找到泛型类型

时间:2013-06-20 15:50:10

标签: .net generics reflection

通过反思,有没有办法实现这个目标? 每个实例从IDictionary<,>获得IDictionary<int,int>

我的意图是:

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

然后&#39; 查询&#39;属于UniqueKeyQuery<Sometype,int>类型。
我不想比较名称,因为我希望UniqueKeyQuery是可扩展的。

2 个答案:

答案 0 :(得分:2)

如果您希望“开放”泛型类型(例如,queryGetGenericTypeDefinition可以使用:

 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);