首頁 >後端開發 >C++ >為什麼修改了我的' foreach”循環扔一個集合;枚舉操作可能不會執行”錯誤?

為什麼修改了我的' foreach”循環扔一個集合;枚舉操作可能不會執行”錯誤?

Patricia Arquette
Patricia Arquette原創
2025-02-02 03:51:09581瀏覽

Why Does My `foreach` Loop Throw a

錯誤“收集已修改;枚舉操作可能不會執行”,當aforeach循環在循環執行過程中修改的集合上進行迭代時。 這通常會發生在循環本身或另一個線程中的集合中添加或刪除項目時。

提供的示例在通過

詞典迭代的方法中顯示了此錯誤。該問題源於NotifySubscribers()>方法,該方法可能會間接修改subscribers字典時,SignalData>正在運行。 如果subscribers觸發訂戶的添加或刪除,這可能會發生。 NotifySubscribers()> SignalData解決方案是在輸入循環之前創建集合的副本

。 這樣可以防止對原始集合的修改影響循環的迭代:>

使用>創建一個包含

快照的新列表。 現在,
<code class="language-csharp">foreach (Subscriber s in subscribers.Values.ToList())
{
    // Notify subscriber s
}</code>
循環在此獨立副本上運行,以確保對原始字典的修改不會導致錯誤。 這保證了安全可靠的枚舉。

以上是為什麼修改了我的' foreach”循環扔一個集合;枚舉操作可能不會執行”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn