Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menyelesaikan ralat 'Koleksi diubahsuai' apabila meleleh melalui kamus di C#?

Bagaimana untuk menyelesaikan ralat 'Koleksi diubahsuai' apabila meleleh melalui kamus di C#?

Susan Sarandon
Lepaskan: 2025-02-02 03:41:09
asal
937 orang telah melayarinya

How to Resolve the

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan