首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么IDictionary<TKey、TValue>不能/不能实现ILookup<TKey、TValue>?

为什么IDictionary<TKey、TValue>不能/不能实现ILookup<TKey、TValue>?
EN

Stack Overflow用户
提问于 2011-02-24 09:46:45
回答 3查看 908关注 0票数 3

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

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

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

为什么IDictionary不能实现ILookup?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-24 09:53:00

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

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

当然,您可以让IDictionary<T,U>实现通过返回一个具有单个值的IEnumerable<U>来实现这一点,但这将是令人困惑的,特别是如果您的"U“本身是一个集合(即:List<int>)。在这种情况下,ILookup<T,U>.Item是否会返回IEnumerable<List<int>>,或者是否应该对IEnumerable<T>值类型执行某种类型的检查,然后“扁平化”它?无论哪种方式,它看起来都会令人困惑,并增加了可疑的价值。

票数 4
EN

Stack Overflow用户

发布于 2012-01-24 04:57:53

接口IDictionary<T,U>ILookup<T,U>都继承了IEnumerable。如果将IDictionary<T,U>强制转换为IEnumerable并对其调用GetEnumerator(),则结果枚举器应返回KeyValuePair<T,U>的实例。如果将ILookup<T,U>强制转换为IEnumerable并对其调用GetEnumerator(),则结果枚举器应返回IGrouping<T,U>的实例。如果修改KeyValuePair<T,U>结构以实现IGrouping<T,U>,这可能是可行的,但很难做到干净。

票数 2
EN

Stack Overflow用户

发布于 2011-02-24 10:58:59

我怀疑这是因为IDictionary'2接口早在ILookup'2之前就出现了。返回和修改是不必要的。具体的实现可以使用ILookup'2。我看不出修改一个人们已经使用了多年的界面会有什么好处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5099492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档