菜的像徐坤
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

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

4415人阅读 2021/10/3 14:50 总访问:876590 评论:0 收藏:0 手机
分类: Csharp

前言

今天遇到一个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 的时候,集合只能处于只读状态,否则产生不可以预期的效果

评价