Se eu usar:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
o Add
in foreach
lança uma InvalidOperationException (Collection foi modificada; a operação de enumeração pode não ser executada), que considero lógico, já que estamos puxando o tapete debaixo de nossos pés.
No entanto, se eu usar:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
ele prontamente atira no próprio pé fazendo um loop até que lance uma OutOfMemoryException.
Isso é uma surpresa para mim, pois sempre pensei que List.ForEach era apenas um invólucro para foreach
ou para for
.
Alguém tem uma explicação para como e por que esse comportamento?
(Inspirado por ForEach loop para uma lista genérica repetida indefinidamente )