我想这并不重要,我只是好奇。
如果字典和查找之间的区别是一个是一对一的,另一个是一对多的,那么字典不会是另一个的更具体/派生的版本吗?
查找是键/值对的集合,其中键可以重复。字典是键/值对的集合,其中键不能重复。
为什么IDictionary不能实现ILookup?
发布于 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>值类型执行某种类型的检查,然后“扁平化”它?无论哪种方式,它看起来都会令人困惑,并增加了可疑的价值。
发布于 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>,这可能是可行的,但很难做到干净。
发布于 2011-02-24 10:58:59
我怀疑这是因为IDictionary'2接口早在ILookup'2之前就出现了。返回和修改是不必要的。具体的实现可以使用ILookup'2。我看不出修改一个人们已经使用了多年的界面会有什么好处。
https://stackoverflow.com/questions/5099492
复制相似问题