确定类型是否为字典

本文关键字:字典 是否 类型 | 更新日期: 2023-09-27 18:17:05

如何确定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>,所以在不知道参数和不检查名称(因为我们还有其他包含单词Dictionary的类)的情况下,我如何检查它是否是字典

确定类型是否为字典

Type t = dict.GetType();
bool isDict = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>);

你可以得到键和值的类型:

Type keyType = t.GetGenericArguments()[0];
Type valueType = t.GetGenericArguments()[1];

您可以使用IsAssignableFrom来检查type是否实现了IDictionary

var dict = new Dictionary<string, object>();
var isDict = typeof(IDictionary).IsAssignableFrom(dict.GetType());
Console.WriteLine(isDict); //prints true

这段代码将对所有不实现IDictionary接口的类型打印false。

有一个非常简单的方法可以做到这一点,而且你几乎就做到了。

试试这个:

var dict = new Dictionary<string, object>();
var isDict = (dict.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>))

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);

由于所有泛型Dictionary类型都继承自IDictionary接口,因此您只需检查