qq_34547967 2022-05-18 09:24 采纳率: 0%
浏览 45
已结题

程序运行一周后出现了集合已修改的报错,但是实际上这个集合并未做操作

程序运行一周后出现了集合已修改的报错,但是实际上这个集合并未做修改操作,也没有做移除操作,此方法是定时器每分钟执行的;

img

img

  • 写回答

4条回答 默认 最新

  • 歇歇 2022-05-24 02:08
    关注
    获得5.00元问题酬金

    foreach语句是对枚举数的包装,它只允许从集合中read,不允许write。
    原因:多线程并发造成的。多个地方同时操作了集合。
    修改方法就是在使用集合时读写分离或复制映射。也可以用数组索引的方式调用。

    使用foreach不能执行删除、修改,这是规定。你可以使用for(i=0;i<XXX;i++)循环遍历修改

    解决方案:

    lock (数据源)
    
    {
    
         for (int i = 0; i < 数据源.Count; i++)
    
         {
    
              //TODO 相应操作
    
         }
    
    }
    
    

    小知识:

    删除数据正确做法,for循环 i 要从大到小,比如:

    for( int i=数据源.Count -1; i >= 0; i--)
    
    {
    
         //TODO 删除数据操作
    
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 赞助了问题酬金10元 5月18日
  • 创建了问题 5月18日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看