我想测试一个对象看它是否实现了IDictionary<TKey,TValue>
但我不在乎什么TKey
和 TValue
是。
我可以测试是否是框架的具体实例Dictionary<,>
像这样:
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
但我想不出一种方法来测试实现 IDictionary<,>
的东西.该技术不适用于界面; IsAssignableFrom
如果我针对泛型基类型进行测试,则返回 false IDictionary<,>
,这看起来很奇怪,因为它适用于具体类型。
通常你会使用is
测试某物是否实现了一个接口(interface),当然这只有在我想测试一个特定的通用接口(interface)时才有效。或者我只是测试一个通用的祖先接口(interface),但不像其他通用数据结构,如 IList<>
和 ICollection<>
, 没有唯一的非通用接口(interface)可以从中生成通用 IDictionary<TKey,TValue>
继承。
最佳答案
怎么样
return type.GetInterfaces()
.Where(t => t.IsGenericType)
.Select(t => t.GetGenericTypeDefinition())
.Any(t => t.Equals(typeof(IDictionary<,>)));
我相信您可以轻松地将其概括为任何泛型类型定义。
关于c# - 测试对象是否为任何泛型类型实现了泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10900021/