Если я использую:
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 для универсального списка повторяется бесконечно )