当前位置: 首页 > news >正文

循环遍历List中for循环与foreach区别与使用

代码一:
 for (int i = 0; i < modelList.Count; i++)
    {
        ThirteenCalcInsuranceModel escCompanyData = haveThirteenData.FirstOrDefault(t => t.EmployeeNo == modelList[i].EmployeeNo && t.SalaryComoanyID != modelList[i].SalaryComoanyID);
        if (escCompanyData != null)
        {
            modelList.Remove(modelList[i]);
            LogUtil.InfoLog.Info("员工号为" + modelList[i].EmployeeNo + "的员工,十三薪数据已存在且自动忽略!");
        }
    }
代码二:
   foreach (var item in modelList)
    {

        LogUtil.InfoLog.Info("多发新账套员工EmployeeNo = " + item.EmployeeNo);

        // 去除十三薪数据已经导入的员工
        ThirteenCalcInsuranceModel escCompanyData = haveThirteenData.FirstOrDefault(t => t.EmployeeNo == item.EmployeeNo && t.SalaryComoanyID != item.SalaryComoanyID);
        if (escCompanyData != null)
        {
            modelList.Remove(item);
            LogUtil.InfoLog.Info("员工号为" + escCompanyData.ESID + "的员工,十三薪数据已存在!");
        }
    }

两段代码都是循环遍历modelList,原则上是没有什么问题的,但是在运行的时候,第二段代码出现的报错,“集合已修改,可能无法执行枚举操作”,这就出现问题了。

问题的原因在于,在循环遍历list时,执行了remove删除操作,这样就会报错:查询集合已修改,可能无法执行枚举操作查一下,这个师使用foreach时出现的典型问题。

由此深入了解了下for循环和foreach循环的使用注意事项:

foreach循环:只能用于遍历,不能更改循环目标,遍历速度块,执行效率高。
for循环:可以用于任何形式的重复行为,在循环体中可以执行任何操作,遍历速度慢,执行效率低。

相关文章:

  • GitHub Page个人博客中评论功能
  • 钉钉中一些api的使用
  • sql server中存储过程的使用
  • sql中报错:“从数据类型 varchar 转换为 bigint 时出错”解决
  • c#中Excel转为DataTable对象
  • SQL Server Always Encrypted加密使用
  • .Net中wcf服务生成及调用
  • sql中视图的使用
  • VB中Http请求测试
  • springboot集成SqlServer的坑
  • HttpClient请求Https证书问题解决
  • springcloud中使用ribbon实现负载均衡报错问题
  • Spring基础
  • Spring创建对象的几种方式
  • Java服务后台启动问题总结
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [LeetCode] Wiggle Sort
  • [笔记] php常见简单功能及函数
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 30秒的PHP代码片段(1)数组 - Array
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • C学习-枚举(九)
  • ES10 特性的完整指南
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel核心解读--Facades
  • React中的“虫洞”——Context
  • Vue 2.3、2.4 知识点小结
  • Vue.js 移动端适配之 vw 解决方案
  • vue自定义指令实现v-tap插件
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 阿里云前端周刊 - 第 26 期
  • 分布式事物理论与实践
  • 服务器从安装到部署全过程(二)
  • 关于Flux,Vuex,Redux的思考
  • 解决iview多表头动态更改列元素发生的错误
  • 坑!为什么View.startAnimation不起作用?
  • 聊聊directory traversal attack
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何编写一个可升级的智能合约
  • 一、python与pycharm的安装
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 阿里云重庆大学大数据训练营落地分享
  • ​什么是bug?bug的源头在哪里?
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (6)STL算法之转换
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)用.Net的File控件上传文件的解决方案
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET Core 中的路径问题
  • .net FrameWork简介,数组,枚举
  • .NET 药厂业务系统 CPU爆高分析