我使用以下方法,但在Dictionary
上,它会返回TKey
。
Dictionary
实现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;
}
答案 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;
}