从ICollection中获取泛型类型

时间:2016-11-23 16:30:19

标签: dictionary generics reflection

我使用以下方法,但在Dictionary上,它会返回TKeyDictionary实现ICollection<KeyValuePair<TKey,TValue>>所以我怎么能得到 KeyValuePair<TKey,TValue>

public static Type GetCollectionGenericType( this Type type )
{
    foreach( Type interfaceType in type.GetInterfaces() )
    {
        if( interfaceType.IsGenericType &&
            interfaceType.GetGenericTypeDefinition() == typeof( ICollection<> ) )
        {
            return type.GetGenericArguments()[ 0 ];
        }
    }
    return null;
}

1 个答案:

答案 0 :(得分:2)

Dictionary<>的第一个通用参数是TKey,这就是您的代码返回的内容。您必须更改代码以获得正在循环的interfaceType的第一个通用参数。

public static Type GetCollectionGenericType( Type type )
{
    foreach( Type interfaceType in type.GetInterfaces() )
    {
        if( interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof( ICollection<> ) )
        {
            return interfaceType.GetGenericArguments()[ 0 ];
        }
    }
    return null;
}