Si j'utilise :
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
le site Add
dans le foreach
lance une InvalidOperationException (Collection was modified ; enumeration operation may not execute), ce que je considère comme logique, puisque nous sommes en train de couper l'herbe sous le pied.
Cependant, si j'utilise :
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
il se tire rapidement une balle dans le pied en bouclant jusqu'à ce qu'il lève une exception OutOfMemoryException.
C'est une surprise pour moi, car j'ai toujours pensé que List.ForEach n'était qu'une enveloppe pour foreach
ou pour for
.
Quelqu'un a-t-il une explication sur le comment et le pourquoi de ce comportement ?
(Inspiré par Boucle ForEach pour une liste générique répétée à l'infini )