今天编写程序时 修改了list集合 在foreach时报 “集合已修改;可能无法执行枚举操作。”错误。
首先想到的是没有锁定集合对象。
增加了 private readonly object syncRoot = new object();
所以先尝试 lock(syncRoot){}
lock关键字用法,多线程共用对象时,操作对象时锁定对象,这样如果有别的线程访问对象,则自动加入队列等待。确保对象操作过程中准确性。
但是问题依旧,查了一下说foreach是只读的,集合如果变更就会出这个问题
于是把foreach改为 for(int i =0) 后,问题解决
foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。要避免这个问题,就应该使用for循环。
在这里记录下 有类似问题希望对你有所帮助