2016-11-23 99 views
1

我使用下面的方法,但在Dictionary它返回TKeyDictionary implements ICollection<KeyValuePair<TKey,TValue>>所以我怎樣才能得到 KeyValuePair<TKey,TValue>獲取泛型類型out of ICollection

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

回答

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