为什么.NET Core没有List<T>.ForEach方法?

7

我正在将一些代码移植到Windows Store应用程序上,并注意到.NET Core框架中没有包含List<T>.ForEach方法(Windows Store应用程序引用的框架)。

MSDN确认该方法不适用于Store应用程序。

我可以轻松地解决缺少的方法,但此时我只是好奇为什么会缺少它。


从技术上讲,它不是一个“扩展”,而是List<T>类中的普通实例方法。 - Jeppe Stig Nielsen
可能是Is the List<T>.ForEach() extension method gone?的重复问题。 - Luke Woodward
1个回答

16
我可以轻松地绕过缺失的方法,但此时我只是好奇为什么它会消失。
我怀疑它被认为是不必要的膨胀,从一开始就不应该出现在框架中,因为通常使用foreach更加简洁
事实上,在该博客文章底部的链接中,微软在MSDN论坛中提供了答案:

List<T>.ForEach已在Metro风格应用程序中删除。虽然该方法看起来很简单,但当传递给ForEach的方法通过列表进行变异时,它可能会出现许多潜在问题。相反,建议您简单地使用foreach循环。


似乎更多与在回调函数中改变列表所带来的问题有关:https://dev59.com/7Gkv5IYBdhLWcg3w3Uc0#10299492 - BoltClock
1
@BoltClock:只是链接到同一个原始来源。我不确定在ForEach中突变比foreach更成问题,但两种情况都可能以同样的方式失败。 - Jon Skeet
虽然我同意它会增加不必要的膨胀,但我从来没有真正看到它的意义。 - BoltClock
也许这样做的原因是,如果你使用 foreach,就感觉不允许改变集合,但在 ForEach 回调中,开发人员可能不会有同样的感觉。 - doug65536
1
“foo.thing?.forEach { ... }” 是应该包含的主要原因。使用“foreach(var thing in foo.thing ?? new List<Thing>())”很痛苦,需要额外分配一个不必要的List,所以你最终不得不在循环外部进行if检查。 - Benhamine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接