Jika saya menggunakan:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
bagian Add
dalam foreach
melempar sebuah InvalidOperationException (Koleksi telah dimodifikasi; operasi pencacahan tidak dapat dijalankan), yang saya anggap logis, karena kita menarik permadani dari bawah kaki kita.
Namun, jika saya menggunakan:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
itu segera menembak dirinya sendiri di kaki dengan perulangan sampai melempar OutOfMemoryException.
Ini adalah kejutan bagi saya, karena saya selalu berpikir bahwa List.ForEach hanyalah pembungkus untuk foreach
atau untuk for
.
Adakah yang punya penjelasan tentang bagaimana dan mengapa perilaku ini?
(Terinspirasi oleh perulangan ForEach untuk Daftar Generik yang berulang tanpa henti )