gpt4 book ai didi

c# - 测试对象是否为任何泛型类型实现了泛型接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 21:13:50 25 4
gpt4 key购买 nike

我想测试一个对象看它是否实现了IDictionary<TKey,TValue>但我不在乎什么TKeyTValue是。

我可以测试是否是框架的具体实例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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com