Jika saya menggunakan:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
bagian Adddalam foreachmelempar 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 foreachatau untuk for.
Adakah yang punya penjelasan tentang bagaimana dan mengapa perilaku ini?
(Terinspirasi oleh perulangan ForEach untuk Daftar Generik yang berulang tanpa henti )