c# - 为什么 IDictionary<TKey,TValue> 不/不能实现 ILookup<TKey,TValue>?

标签 c# dictionary

我想这并不重要,我只是好奇。

如果字典和查找之间的区别是一个是一对一的,另一个是一对多的,那么不会通过另一个更具体/派生的版本来字典吗?

查找是键/值对的集合,其中键可以重复。 字典是键/值对的集合,其中键不能重复。

为什么 IDictionary 不能实现 ILookup?

最佳答案

我怀疑这主要是因为意图不同。

ILookup<T,U>专为处理值集合而设计。 IDictionary<T,U>旨在使用单个值(当然可以是一个集合)。

虽然您当然可以拥有 IDictionary<T,U>实现通过返回 IEnumerable<U> 来实现这一点使用单个值,这会造成混淆,特别是如果您的“U”本身就是一个集合(即:List<int>)。在那种情况下,会 ILookup<T,U>.Item返回 IEnumerable<List<int>> ,还是应该对 IEnumerable<T> 进行某种类型的检查?值类型,然后“扁平化”呢?无论哪种方式,它都会看起来令人困惑,并增加可疑的值(value)。

关于c# - 为什么 IDictionary<TKey,TValue> 不/不能实现 ILookup<TKey,TValue>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5099492/

相关文章:

Python:添加元素以在字典中设置值

c# - 我可以调用执行相似功能的不同类(具有不同的方法和类型)吗?

c# - 是否通过对象初始化设置属性 : Any difference ?

c# - InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute

swift - 如何更新混合类型的 Swift 字典值,尤其是数组

python - 从 "graph"(数据库)数据递归创建字典

c# - 可以在 C# 构造函数中调用数据库初始化吗?

c# - 如何配置 MYSQL ODBC 驱动程序以与 Visual Studio 2013 一起使用?

javascript - 你如何 JSON.stringify ES6 Map?

javascript - Svg 动画对象跟随路径