Session

集合已修改;可能无法执行枚举操作。

电脑版发表于: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 的时候,集合只能处于只读状态,否则产生不可以预期的效果

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢