dengan mudah menyelesaikan masalah "koleksi telah diubah suai": Elakkan pengubahsuaian senarai dalam kitaran
Dalam proses pengaturcaraan, apabila "koleksi telah diubahsuai, penghitungan itu tidak boleh dilaksanakan" kesilapan, pengaturcara sering dikelirukan, terutamanya apabila masalah masih sukar untuk dikesan di bawah debugger. Walau bagaimanapun, jangan risau, penyelesaiannya adalah untuk memahami perubahan senarai yang berpotensi dalam kitaran ralat.
Ralat ini berlaku apabila elemen dalam koleksi diubahsuai apabila set bulat. Dalam fragmen kod pelayan WCF, kamus "subsidan" diubahsuai dalam kitaran "foreach" kaedah "NotifySubscribers". Khususnya, apabila kaedah "SignalData" secara tidak langsung diubah suai, ralat ini akan disebabkan.
Untuk menyelesaikan masalah ini, kita boleh menggunakan kaedah "Tolist ()" untuk menukar nilai kamus ke dalam senarai baru sebelum kitaran, dengan itu mengelakkan perangkap "diubahsuai". Ini akan mewujudkan senarai berasingan yang bebas daripada kamus asal untuk memastikan perubahan kepadanya semasa kitaran tidak akan menjejaskan proses berulang.
Berikut adalah kaedah menyesuaikan kod:
Dengan menggunakan teknologi ini, kitaran tidak lagi mengendalikan kamus asal, tetapi mengendalikan salinan bebas. Ini menghapuskan kemungkinan pengubahsuaian serentak dan menghalang kesilapan yang menjengkelkan "pengumpulan telah diubah suai".
<code class="language-c#">private static readonly IDictionary<Guid, Subscriber> subscribers = new Dictionary<Guid, Subscriber>(); ... public void NotifySubscribers(DataRecord sr) { foreach (Subscriber s in subscribers.Values.ToList()) // 将值复制到单独的列表中 { try { s.Callback.SignalData(sr); } catch ... } }</code>
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat 'Koleksi diubahsuai' apabila meleleh melalui kamus di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!