为什么编译器选择一般重载而不是特定重载?

Why does compiler select a general overload than a specific overload?

提问人:Eiconic 提问时间:7/8/2023 更新时间:7/8/2023 访问量:35

问:

事情是这样的,我有两个重载用于接受和的方法。现在,在大多数情况下,编译器在对对象调用时几乎总是选择适当的重载。IDictionary<T,K>IEnumerable<T>

但有时当字典变得有点复杂时,比如,

IReadOnlyDictionary<CustomClassA<CustomClassB>, IOrderedEnumerable<CustomClassC<CustomClassD>>>编译器只是为 选择重载,可能是因为它更简单。IEnumerable<T>

我确实知道将对象显式转换为字典时间可能会解决问题,但是请注意,这些重载也是递归的,例如如果存在,则调用重载方法将执行,当找到列表时,它也会转到另一个重载。Dictionary<List<int>> obj

此外,还实现了 IOrderedEnumerable 重载。

C# .NET Casting 重载解决方法

评论

4赞 juharr 7/8/2023
IReadOnlyDictionary不继承自 ,但继承自IDictionaryIEnumerable
0赞 Eiconic 7/8/2023
同意,但是当我尝试实现重载时,任何以指向和无的形式指向 。IReadOnlyDictionaryKeyValuePairIReadOnlyDictionaryIDictionary
4赞 BJ Myers 7/8/2023
如果您可以发布一个最小的可重现示例来演示此行为,那将会很有帮助。
0赞 NetMage 7/8/2023
您是否阅读了有关过载解决方案的文档
0赞 NetMage 7/8/2023
我无法复制您的问题 - 如果我有一个重载,那么类型的参数会选择该重载。“以”的形式“究竟是什么意思?IReadOnlyDictionaryIReadOnlyDictionaryKeyValuePair

答: 暂无答案