輕鬆解決“集合已修改”難題:循環中避免列表修改
在編程過程中,遇到令人沮喪的“集合已修改;枚舉操作可能無法執行”錯誤時,程序員常常會感到困惑,尤其是在調試器下問題仍然難以察覺時。但是,不用擔心,解決方法在於理解在出錯循環中潛在的列表更改。
此錯誤發生在循環迭代集合時修改集合中的元素時。在提供的WCF服務器代碼片段中,“訂閱者”字典在“NotifySubscribers”方法的“foreach”循環中被修改。具體來說,當“SignalData”方法間接修改字典時,就會導致此錯誤。
為了解決這個問題,我們可以在循環之前使用“ToList()”方法將字典的值轉換為新的列表,從而避免“集合已修改”的陷阱。這將創建一個獨立於原始字典的單獨列表,確保在循環期間對其進行的更改不會影響迭代過程。
以下是調整代碼的方法:
<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>
通過使用此技術,循環不再操作原始字典,而是操作獨立副本。這消除了並發修改的可能性,並防止了令人討厭的“集合已修改”錯誤。
以上是通過C#中的字典迭代時,如何解決'收集已修改”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!