我想编写一个函数来从实现IDictionary的类型中获取类型参数。到目前为止,我在大多数SO问题中讨论的内容是:
public static Type[] GetParameters(Type dicType) {
if (typeof(IDictionary).IsAssignableFrom(dicType)) {
return dicType.GetGenericArguments();
}
else {
return null;
}
}
然而,这失败了以下内容:
public class MyClass : Dictionary<string, int> { }
Type[] typeParams = GetParameters(typeof(MyClass));
Console.WriteLine(String.Join(", ", (object[]) typeParams));
它什么都不打印(空数组)。以下情况更糟糕:
public class MyOtherClass<T, U> : Dictionary<string, string> { }
Type[] typeParams = GetParameters(typeof(MyOtherClass<int, int>));
Console.WriteLine(String.Join(", ", (object[]) typeParams));
因输出完全错误(System.Int32,System.Int32)。
如何从任何继承自IDictionary的类型中获取这些参数?
答案 0 :(得分:0)
在撰写问题时,我实际上想出了一个答案:
public static Type[] GetDictionaryParameters(Type dicType) {
foreach(var interf in dicType.GetInterfaces()) {
if (interf.IsGenericType && interf.GetGenericTypeDefinition() == typeof(IDictionary<,>)) {
return interf.GetGenericArguments();
}
}
// No matching interface
return null;
}
这适用于我目前所拥有的一切。如果您有更好的想法,请发布另一个答案!