【发布时间】:2012-07-14 15:39:51
【问题描述】:
我不明白为什么List<T>.ForEach() 扩展方法在底层实现了for 循环。这打开了修改集合的可能性。在这种情况下,普通的foreach 会抛出异常,所以ForEach() 肯定会以同样的方式做出反应吗?
如果您出于某种原因必须改变集合,那么您肯定应该在 for 循环中手动迭代集合吗?
foreach 和 List<T>.ForEach() 之间似乎存在一些语义矛盾。
我错过了什么吗?
【问题讨论】:
-
"这开启了集合被修改的可能性。" Exactly why it is now gone from .NET for Metro-style apps.哼哼。
-
Eric Lippert 的(不赞成)comments on
.ForEach在这种情况下总是值得一读。 -
@user287107:这是我不久前链接到的。
-
...如果你改变数据,这就是你得到的结果 - 抱歉,LINQ 有很深的 FP 根源,并且在 FP 中鼓励不可变数据和引用透明度是有原因的。 .. 如果你不喜欢这个实现,那就自己做 - 或者更好地接受不可变数据!