【发布时间】:2012-03-07 21:03:51
【问题描述】:
如果我使用:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
foreach 中的 Add 抛出 InvalidOperationException(集合已修改;枚举操作可能无法执行),我认为这是合乎逻辑的,因为我们正在从脚下拉扯地毯。
但是,如果我使用:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
它会迅速循环,直到抛出 OutOfMemoryException。
这对我来说是一个惊喜,因为我一直认为 List.ForEach 要么只是 foreach 或 for 的包装器。
有没有人解释这种行为的方式和原因?
【问题讨论】:
-
我同意。这是 - 可疑的。我建议您将其发布在 microsoft connect 上并要求澄清。
-
"这对我来说是一个惊喜,因为我一直认为 List.ForEach 要么只是
foreach或for的包装器。"它仍然可以使用for。您可以在for循环中执行相同的操作并生成相同的 OutOfMemoryException 作为结果。 -
这是基于我的问题:stackoverflow.com/q/9311272/132239,感谢 SWeko 了解它的详细信息