菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

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

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

前言

今天遇到一个foreach中的问题,foreach遍历的集合发生改变就会发生报错

解决办法,将foreach替换成for解析

  1. //定义一个空的对象list用来合并重复数据
  2.  IDrugStoreList drugStoreList = new DrugStoreList();
  3.  //循环storeList
  4.   foreach (IDrugStore item in this.storeList.Rows)
  5.                 {
  6.                 //定义一个状态
  7.                     int type = 0;
  8.                     //循环对比是否存在重复数据
  9.                     for (int i = 0; i < drugStoreList.Rows.Count; i++)
  10.                     {
  11.                     //是否重复根据DrugCode来区别
  12.                         if (item.DrugCode == (drugStoreList.Rows[i] as IDrugStore).DrugCode)
  13.                         {
  14.                         //重复就将数量加起来
  15.                             (drugStoreList.Rows[i] as IDrugStore).Number += item.Number;
  16.                             //更改状态
  17.                             type = 1;
  18.                             //跳出循环
  19.                             break;
  20.                         }
  21.                     }
  22.                   //第一行不需判断
  23.                     if (drugStoreList.Rows.Count==0)
  24.                     {
  25.                         type = 1;
  26.                         drugStoreList.AddEntity(item);
  27.                     }
  28.                     //如果不是重复的就新增
  29.                     if (type == 0)
  30.                     {
  31.                         drugStoreList.AddEntity(item);
  32.                     }
  33.                 }

总结:
foreach 内部使用枚举器迭代,而这个迭代器在一开始的时候就返回了,它的迭代次数已经确定了,

但是,你后面又更新了集合,导致之前的迭代次数不一致了

当使用 foreach 的时候,集合只能处于只读状态,否则产生不可以预期的效果

评价

Quartz.NET实例动态改变周期调度misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.NET Windows服务发布、安装、卸载、监听脚本服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

nginx常用命令nginx启动命令nginx重启命令nginx关闭命令nginx测试配置文件是否正确nginx nginx.pid文件丢失报错

启动命令:start nginx 关闭命令:nginx -s stop nginx -s quit nginx -s stop与nginx -s quit区别 Quit is a graceful shu...

DevExpress.XtraSpreadsheet.SpreadsheetControl控件 加载excel模板

stringpath=&quot;文件路径&quot;; DevExpress.XtraSpreadsheet.SpreadsheetControlspreadsheetControl=newDevExpress.Xtr...

上传文件到服务器及 下载到 客户端

usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Net; usingSystem.IO; namespaceCo...

使用OutLook发送邮件

publicstaticvoidOutlook(stringSubject,stringTextBody,stringFromAdd,stringFromPass,stringTo,stringCC,List&lt;string&...

类型“DbSet”在未引用的程序集中定义必须添加对程序集“EntityFramework Version=5.0.0.0 Culture=neutral PublicKeyToken=b7

在用mvc+ef的时候在DAL层引用上下文信息的时候会报出下面错误其实就是没得EntityFromwork,打开vs项目,点击工具,选择NuGe...

SQL Server 中使用游标

--声明一个游标 DECLAREMyCursorCURSOR FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo//定义一个叫MyCursor的游标,...

C委托与事件

1.什么是委托?  委托在C#里的意义和在现实里差不多,从字面意思理解即可。举个例子:领导委托小张去传递个文件,这就是...

正则表达式匹配中文标点符号

//匹配这些中文标点符号。?!,、;:“”‘&#39;()《》〈〉【】『』「」﹃﹄〔〕…—~﹏¥ varreg=/[\u3002|\uff1f|\...

泛型简单介绍

说到了泛型,就介绍下泛型泛型不是特指具体类型,是一种可变类型,可以把他看做一个类型占位符,根据传入的类型 延迟声明具...

数据读取器与指定的"xx"不兼容某个类型为"xx"的成员在同名的数据读取器中没有对应的列

报错的地方var result= _db.Database.SqlQuery&lt;SMachine&gt;(sql).FirstOrDefault();经过分析,是因为SqlQuery方法查询...

远程服务器返回错误: (403) 已禁止

今天调用接口的时候报的错。我们只要加上这两句代码就行了呢HttpWebRequestreq=(HttpWebRequest)HttpWebRequest.Create(url...

NPOI读取excelexcel 导入日期类型读取

NPOI是一个优秀的操作excel的库,可以很方便的进行excel的读取与导出NPOI读取excelpublicActionResultReadExcel() { //打...

NPOI导出excel根据模板导出Excel

使用NPOI导出excel///&lt;summary&gt; ///导出excel(下载excel) ///&lt;/summary&gt; publicvoidToExcel() { HSSFWo...