Si uso:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
el Adden el foreacharroja 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 foreacho 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 )