如果我使用:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
在Add
在foreach
引发InvalidOperationException(集合被修改;枚举操作可能不会执行),我认为合理的,因为我们从我们脚下拉地毯。
但是,如果我使用:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
它会迅速循环直到循环抛出OutOfMemoryException为止。
这让我感到意外,因为我一直以为List.ForEach只是for foreach
或for 的包装for
。
是否有人对此行为的方式和原因做出了解释?
(由ForEach循环为泛型列表不断重复标记)