Ответ 1
Я думаю, что это может быть то, что вы ищете:
Dictionary<int, string> dictionary = new Dictionary<int, string>();
Type[] arguments = dictionary.GetType().GetGenericArguments();
Type keyType = arguments[0];
Type valueType = arguments[1];
Ссылка: Type.GetGenericArguments