如果我使用:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
foreach
中的 Add
抛出一个 InvalidOperationException (Collection 被修改; 枚举操作可能不会执行) ,我认为这是合乎逻辑的,因为我们正在从脚下拉地毯。
但是,如果我使用:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
它立即循环射击自己的脚,直到抛出一个 OutOfMemory 异常。
这让我很惊讶,因为我一直认为。ForEach 只是 foreach
或 for
的包装器。
有人能解释一下这种行为的原因吗?
(灵感来自 不断重复的泛型列表的每个循环)