【发布时间】:2018-02-24 01:42:16
【问题描述】:
经过几个小时的研究(在 MSDN 网站等上),我没能弄清楚为什么通用 Dictionary<TKey, TValue> 没有像 List<T> 那样提供 ForEach() 方法。有人可以给我一个解释吗? (我知道将它实现为扩展方法并不难,可以看到一个很好的例子here,我只是想知道是否可能有特殊原因导致 .NET 库一开始就没有提供它。 )
提前致谢。
【问题讨论】:
-
答案就在你引用的问题中:字典每个键只有一个值,所以不需要foreach。
-
是的,但他可能想要遍历字典中的所有 KVP。
-
@Jeremy
IDictionary<,>没有实现IEmumerable<KeyValuePair<,>>吗?如果一个是不必要的,那么另一个肯定也是如此。 Java 的Map<,>有一个forEachEntry方法。也许这就是 OP 所询问的。 -
同意,这就是我的意思——我希望像这样遍历条目:
d.ForEach(p => { Console.WriteLine(p.Key + ' ' + p.Value); });。 -
List.ForEach 有一个非常强大的隐含保证:元素的暴露顺序是高度确定的。添加或删除项目不会从根本上改变这一点。 Dictionary 不能提供任何此类保证,它不是有序集合。尤其糟糕,因为它很容易看起来有序,您确实倾向于按照添加的顺序取回项目。但是当它决定重新组织存储桶时,它可能会随机改变。
标签: c# dictionary generics foreach iteration