Якщо я використовую:
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 був просто обгорткою для foreach
або для for
.
Хтось має пояснення, як і чому така поведінка?
(Натхненний циклом ForEach для загального списку, що повторюється нескінченно )