Si uso:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
el Add
en el foreach
arroja una InvalidOperationException (la colección fue modificada; la operación de enumeración puede no ejecutarse), lo cual considero lógico, ya que estamos tirando de la alfombra debajo de nuestros pies.
Sin embargo, si uso:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
rápidamente se dispara en el pie haciendo un bucle hasta que arroja una OutOfMemoryException.
Esto me sorprende, ya que siempre pensé que List.ForEach era solo un envoltorio para foreach
o para for
.
¿Alguien tiene una explicación del cómo y el por qué de este comportamiento?
(Inspirado por el bucle ForEach para una lista genérica repetida sin cesar )