首页 > 后端开发 > C++ > 通过C#中的字典迭代时,如何解决'收集已修改”错误?

通过C#中的字典迭代时,如何解决'收集已修改”错误?

Susan Sarandon
发布: 2025-02-02 03:41:09
原创
938 人浏览过

How to Resolve the

轻松解决“集合已修改”难题:循环中避免列表修改

在编程过程中,遇到令人沮丧的“集合已修改;枚举操作可能无法执行”错误时,程序员常常会感到困惑,尤其是在调试器下问题仍然难以察觉时。但是,不用担心,解决方法在于理解在出错循环中潜在的列表更改。

此错误发生在循环迭代集合时修改集合中的元素时。在提供的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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板