Это поможет вам с вашими итерациями отражения.
IDictionary<int, string> t;
bool t.GetType().IsGenericType
Type[] t.GetType().GetGenericArguments()
// you can do foreach here and see again if type is generic
Вы можете создать вспомогательный метод, в котором вы сначала проверяете, является ли тип универсальным, а затем проверяет универсальные типы аргументов. Это позволит проверить не только общие словари, но и любой тип, имеющий общие аргументы. IList, KeyValuePair и т. Д.
public static bool IsType(Type inputType, Type targetType)
{
if (inputType.IsGenericType)
{
Type[] genericArgs = inputType.GetGenericArguments();
var foundType = false;
foreach (var item in genericArgs)
{
if (IsType(item, targetType))
foundType = true;
}
return foundType;
}
return inputType.IsAssignableFrom(targetType);
}