Si j'utilise:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
le Add
dans le foreach
jette une InvalidOperationException (la collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter), ce que je considère comme logique, car nous tirons le tapis de sous nos pieds.
Cependant, si j'utilise:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
il se tire rapidement dans le pied en faisant une boucle jusqu'à ce qu'il lance une OutOfMemoryException.
Cela me surprend, car j'ai toujours pensé que List.ForEach n'était qu'un wrapper pour foreach
ou pour for
.
Quelqu'un at-il une explication sur le comment et le pourquoi de ce comportement?
(Inspiré par la boucle ForEach pour une liste générique répétée à l'infini )