Jeśli używam:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
Addw foreachrzuca InvalidOperationException (Kolekcja została zmodyfikowana; operacja wyliczania nie może wykonać), które uważam za logiczne, ponieważ jesteśmy pociągając dywanik spod naszych stóp.
Jeśli jednak używam:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
natychmiast strzela sobie w stopę, wykonując pętlę, aż wyrzuci wyjątek OutOfMemoryException.
Zaskoczyło mnie to, ponieważ zawsze myślałem, że List.ForEach to tylko opakowanie dla foreachlub dla for.
Czy ktoś ma wyjaśnienie, jak i dlaczego to zachowanie?
(Zainspirowany pętlą ForEach dla listy ogólnej powtarzanej w nieskończoność )