如果我使用:
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 + "!");
});
使用List.ForEach时,它会循环直到抛出OutOfMemoryException异常,这会让人感到惊讶,因为我一直以为List.ForEach只是foreach或for的包装器。
是否有人能解释一下这种行为的原因和方式?
foreach
或for
的包装器之一。但实际上仍可以使用for
来执行相同的操作,并且可能会导致同样的OutOfMemoryException异常。 - Anthony Pegram