集合已修改;可能无法执行枚举操作。
电脑版发表于:2021/10/3 14:50
前言
今天遇到一个foreach中的问题,foreach遍历的集合发生改变就会发生报错
解决办法,将foreach替换成for解析
//定义一个空的对象list用来合并重复数据 IDrugStoreList drugStoreList = new DrugStoreList(); //循环storeList foreach (IDrugStore item in this.storeList.Rows) { //定义一个状态 int type = 0; //循环对比是否存在重复数据 for (int i = 0; i < drugStoreList.Rows.Count; i++) { //是否重复根据DrugCode来区别 if (item.DrugCode == (drugStoreList.Rows[i] as IDrugStore).DrugCode) { //重复就将数量加起来 (drugStoreList.Rows[i] as IDrugStore).Number += item.Number; //更改状态 type = 1; //跳出循环 break; } } //第一行不需判断 if (drugStoreList.Rows.Count==0) { type = 1; drugStoreList.AddEntity(item); } //如果不是重复的就新增 if (type == 0) { drugStoreList.AddEntity(item); } }
总结:
foreach 内部使用枚举器迭代,而这个迭代器在一开始的时候就返回了,它的迭代次数已经确定了,
但是,你后面又更新了集合,导致之前的迭代次数不一致了
当使用 foreach 的时候,集合只能处于只读状态,否则产生不可以预期的效果