集合已修改;可能无法执行枚举操作 for 与foreach
来源:互联网 发布:福建广电网络集团如何 编辑:程序博客网 时间:2024/06/04 18:48
今天弄dictionary遍历缓存集合,定时清除10分钟以上的缓存项,部分代码如下
foreach (var item in CACHE_POOL)
{
TimeSpan ts = DateTime.Now - item.Value.LastTime;
if (ts.TotalMilliseconds > cleartime * 60000)
CACHE_POOL.Remove(item.Key);
}
测试时候发现出现“ 集合已修改 ; 可能无法执行枚举操作 ”的问题
查阅了一下发现for和foreach的一个算是蛮重要的区别
foreach是取只读的,在取的时候数据不 能变(包括修改,删除,添加等),因为在取之前foreach的集合已经定好了,
我们一旦执行增删改,相当于一边遍历一边往里加东西,遍历不明白了。
要避免这个问题,可以使用for循环去完成此功能,或者先copy要foreach的对象,对copy的对象进行遍历,然后remove对象本身,不过copy的方法有时候并不太好用,最好还是用for解决。
我做的是符合条件的remove,for时,i++,所以当移除某项后,下一项补上来了,因此要在符合条件的时候再来个i--,使得remove后,for循环继续执行补上来的下一项
修改后的代码
for(int i=0;i<CACHE_POOL.Count;i++)
{
TimeSpan ts = DateTime.Now - CACHE_POOL.Values.ElementAt(i).LastTime;
if (ts.TotalMilliseconds > cleartime * 60000)
{
CACHE_POOL.Remove(CACHE_POOL.Keys.ElementAt(i));
i--;
}
}
- 集合已修改;可能无法执行枚举操作 for 与foreach
- for遍历Dictionary字典 解决foreach修改字典报集合已修改:可能无法执行枚举操作
- .net使用foreach时发生错误:集合已修改;可能无法执行枚举操作
- C#中出现“集合已修改;可能无法执行枚举操作”错误 foreach list.Remove()
- 集合已修改;可能无法执行枚举操作。
- InvalidOperationException: 集合已修改;可能无法执行枚举操作
- 集合已修改;枚举操作可能无法执行
- 集合已修改,枚举操作可能无法执行
- 集合已修改;枚举操作可能无法执行。
- 集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作。
- C#--集合已修改;可能无法执行枚举操作。
- 读书札记: “集合已修改;可能无法执行枚举操作。”
- C# 集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作。
- System.InvalidOperationException: 集合已修改;可能无法执行枚举操作。
- 集合已修改;可能无法执行枚举操作。
- WPF集合已修改;可能无法执行枚举操作 解决方案
- DriverStudio套件包的安装与运行环境设置
- & < > " 的写法
- StarUML
- log4j配置日志不显示问题排查方法
- 面试题3:二维数组中的查找
- 集合已修改;可能无法执行枚举操作 for 与foreach
- 编写Linux驱动八步骤
- 解决CCS5.1或者Eclipse类产品中文偏小的问题
- java定义在局部的内部类、匿名内部类 (接《c++与java嵌套类比较》)
- gdb调试多进程和多线程命令
- tomcat java开发(实验一Java Web编程简述及JDBC初步)
- 存储过程语法及实例
- E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
- 技术政治之自己准备B计划