如何判断Type是否为Dictionary<,>
目前唯一对我有用的是我真的知道这些论点。
例如:
var dict = new Dictionary<string, object>();
var isDict = dict.GetType() == typeof(Dictionary<string, object>; // This Works
var isDict = dict.GetType() == typeof(Dictionary<,>; // This does not work
但是字典并不总是<string, object>
所以如何在不知道参数的情况下检查它是否是字典而不必检查名称(因为我们还有其他包含单词{{1}的类}}
答案 0 :(得分:66)
Type t = dict.GetType();
bool isDict = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>);
然后,您可以获取键和值类型:
Type keyType = t.GetGenericArguments()[0];
Type valueType = t.GetGenericArguments()[1];
答案 1 :(得分:5)
您可以使用IsAssignableFrom
检查类型是否实现IDictionary
。
var dict = new Dictionary<string, object>();
var isDict = typeof(IDictionary).IsAssignableFrom(dict.GetType());
Console.WriteLine(isDict); //prints true
此代码将为所有未实现IDictionary
接口的类型打印false。
答案 2 :(得分:5)
有一种非常简单的方法可以做到这一点,你几乎就在那里。
试试这个:
var dict = new Dictionary<string, object>();
var isDict = (dict.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>))
答案 3 :(得分:1)
怎么样
Dictionary<string, object> d = new Dictionary<string, object>();
Dictionary<int, string> d2 = new Dictionary<int, string>();
List<string> d3 = new List<string>();
Console.WriteLine(d is System.Collections.IDictionary);
Console.WriteLine(d2 is System.Collections.IDictionary);
Console.WriteLine(d3 is System.Collections.IDictionary);
由于所有通用字典类型都继承自IDictionary接口,您可以只检查