排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256
50010702506256
欢迎加群交流技术
分类:
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 的时候,集合只能处于只读状态,否则产生不可以预期的效果
评价