ถ้าฉันใช้:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
Add
ในforeach
พ่น InvalidOperationException (เก็บได้รับการปรับเปลี่ยนการดำเนินการแจงนับไม่อาจดำเนินการ) ซึ่งผมคิดว่าตรรกะเนื่องจากเรามีการดึงพรมจากภายใต้เท้าของเรา
อย่างไรก็ตามหากฉันใช้:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
มันยิงตัวเองที่เท้าทันทีโดยการวนซ้ำจนกว่ามันจะพ่น OutOfMemoryException
นี้มาเป็นแปลกใจให้ฉันเป็นฉันคิดเสมอว่า List.ForEach เป็นอย่างใดอย่างหนึ่งเพียงเสื้อคลุมสำหรับหรือforeach
ใครมีคำอธิบายเกี่ยวกับวิธีการและสาเหตุของพฤติกรรมนี้หรือไม่?for
(Inpired byEach loop for a Generic List ซ้ำไม่รู้จบ )