Rumah >pembangunan bahagian belakang >C++ >Kenapa gelung `foreach` saya membuang' koleksi telah diubah suai; operasi penghitungan tidak boleh melaksanakan 'ralat?
melelehkan koleksi yang diubahsuai semasa pelaksanaan gelung. Ini sering berlaku apabila menambah atau mengeluarkan item dari koleksi dalam gelung itu sendiri, atau dari benang lain. foreach
yang meleleh melalui kamus NotifySubscribers()
. Masalahnya berpunca daripada kaedah subscribers
, yang mungkin secara tidak langsung mengubah suai kamus SignalData
semasa subscribers
berjalan. Ini boleh berlaku jika NotifySubscribers()
mencetuskan penambahan atau penyingkiran pelanggan. SignalData
sebelum memasuki gelung. Ini menghalang pengubahsuaian koleksi asal daripada mempengaruhi lelaran gelung:
<code class="language-csharp">foreach (Subscriber s in subscribers.Values.ToList()) { // Notify subscriber s }</code>menggunakan
mencipta senarai baru yang mengandungi gambar ToList()
. Gelung subscribers.Values
kini beroperasi pada salinan bebas ini, memastikan pengubahsuaian ke kamus foreach
asal tidak akan menyebabkan kesilapan. Ini menjamin penghitungan yang selamat dan boleh dipercayai. subscribers
Atas ialah kandungan terperinci Kenapa gelung `foreach` saya membuang' koleksi telah diubah suai; operasi penghitungan tidak boleh melaksanakan 'ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!