las*_*zso 1 c# generics iteration foreach dictionary
经过几个小时的研究(在MSDN网站等),我没有找到为什么通用Dictionary<TKey, TValue>不提供ForEach()像List<T>这样的方法.有人可以给我一个解释吗?(我知道将它作为扩展方法实现并不难,这里可以看到一个很好的例子,我只是想知道为什么它首先不是由.NET库提供的特定原因.)
提前致谢.
因为它首先是有问题的List<T>.无需在任何地方重复同样的错误.Eric Lippert在他的博客文章中给出了两个原因:
第一个原因是这样做违反了所有其他序列运算符所基于的函数式编程原则.显然,调用此方法的唯一目的是引起副作用.(......)
第二个原因是,这样做会增加语言的新代表性能力.这样做可以让你重写这个完全清晰的代码:
foreach(foo foo in foos){声明涉及foo; }
进入这段代码:
foos.ForEach((Foo foo)=> {声明涉及foo;});
它使用几乎完全相同的字符,顺序略有不同.然而第二个版本更难理解,更难调试,并引入了闭包语义,从而可能以微妙的方式改变对象的生命周期.(......)