Если я использую:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
the Add
в foreach
выдает InvalidOperationException (Коллекция была изменена; операция перечисления может не выполняться), что я считаю логичным, поскольку мы вытаскиваем коврик из-под ног.
Однако, если я использую:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
он быстро стреляет себе в ногу, зацикливаясь, пока не выдаст OutOfMemoryException.
Для меня это стало неожиданностью, так как я всегда думал, что List.ForEach был либо просто оболочкой для, foreach
либо для for
.
Есть ли у кого-нибудь объяснение того, как и почему такое поведение?
(Вдохновленный циклом ForEach для бесконечного повторяющегося универсального списка )