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
Susan Sarandonasal
2025-02-02 03:41:09999semak imbas

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>

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!

Kenyataan:
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