C#使用List出现“集合已修改;可能无法执行枚举操作”错误的解决办法

原因:

在循环的时候,当集合被删除了一个item后,那么总数 count和索引就会发生改变.所以会报错

解决方法:

不要在List上执行枚举集合的操作(例如foreach)中去执行修改集合的操作。如果需要修改集合,先使用 ToArray() 方法转化成Array,例如

foreach(string s in rs.ToArray())
 {
        if(s.IndexOf(t)<0)
        {
             rs.Remove(t);
        }
 }

原文地址:http://blog.51cto.com/13567390/2061129

时间: 2024-11-10 06:54:07

C#使用List出现“集合已修改;可能无法执行枚举操作”错误的解决办法的相关文章

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

/********************************************************************** * C# 集合已修改;可能无法执行枚举操作 * 说明: * 之前搞Java的时候就很清楚使用多线程操作集合的时候,很容易出现线程 * 安全的问题,还有就是操作线程的时候容易出现集合被修改的问题. * * 2016-12-12 深圳 南山平山村 曾剑锋 ****************************************************

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

foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等).要避免这个问题,就应该使用for循环.        之前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些.今天写了个FOREARCH循环来操作删除某个 collection的元素,出现异常:查询集合已修改:可能无法执行枚举操作查了一下,这个是使用foreach的典型的问题.foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等).要避免这个问题,

c#“集合已修改;可能无法执行枚举操作”

list中用了remove操作,结果报这个错误. 使用foreach不能执行删除.修改,这是规定.你可以使用for循环遍历修改. 如果你是删除的话,for循环 i 要从大到小,比如: for(int i=50;i>=0;i--){ } 而不是 for(int i=0;i<=50;i++){ } 因为当用foreach遍历Collection时,如果对Collection有Add或者Remove操作或者给item某个属性赋值都会有这个错误. 因为Collection返回的IEnumerator把

GMAP 集合已修改;可能无法执行枚举操作 错误【正解】(原创)

这个例子引自http://q.cnblogs.com/q/60028/,我做的时候遇到同样的问题,问了没有人回答我,后来我找到了解决办法,在此分享. 先看一下问题: 今天在主界面里写了一个Thread,函数用While(1)循环,循环中先查找数据库中的最新记录,然后把最新记录的坐标值添加到GMap控件中的一个overlay中显示出来,王红说那个有人说把foreach改成for就好了,可是我还是出这个异常,而且位置奇怪,是程序的Program.cs文件中出现的,代码如下: static class

wordpress修改固定链接及修改链接后链接提示404错误的解决办法

wordpress默认的url实在是不好看又不好记忆,而且还不利于SEO.因此,我就捣鼓着把url做一个自定义.自定义的方式如下: 建议使用/%postname%的形式,这样利于SEO. 修改之后,localhost/wordpress一下,点击导航.点击文章标题.咦,怎么就404了?明明修改之前是可以正常访问的! 郁闷之下,我各种在仪表盘中修改,各种度娘.好像没发现解决方案.知道后来,看到这么篇文章http://blog.csdn.net/think2me/article/details/70

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

无论是向集合中添加元素还是从集合中删除元素,都会导致集合内部的变化,特别是集合遍历器的变化.例如 List<int> list = new List<int>{1,2,3,4,5}; foreach(int x in list) { list.Remove(x); //将引发异常:{"集合已修改:可能无法执行枚举操作."} } 使用foreach不能执行删除.修改,这是规定.你可以使用for循环遍历修改. 如果你是删除的话,for循环 i 要从大到小,比如: f

解决点击关闭按钮,应用程序退出时,系统爆出“集合已修改,可能无法执行枚举操作”异常的相关思路

这两天在优化升级公司的一个业务系统时,更改了一下窗体关闭事件中的一句代码,由system.Enviromen.Exit(0)改为了Application.Exit();但是这时候问题就出现了,当点击系统右上角关闭按钮的时候,会爆出“集合已修改,可能无法执行枚举操作”的异常.如下图所示: 这是什么原因造成的呢?问了一下度娘,出现“集合已修改,可能无法执行枚举操作”这种异常大部分都是因为误用foreach语句引起的,foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等).要避免这个

dede修改templets模板文件夹后,出现“无法在这个位置找到: ”错误的解决办法

修改templets模板文件夹的方法: 首先找到系统配置文件common.inc.php,此文件存放在Include目录下,打开common.inc.php来修改默认模板目录templets, 查找:$cfg_templets_dir = $cfg_cmspath.'/templets'; 将上面的红色部分修改为想要的文件夹名称,例如:xinfu800.com_moban,修改完之后需要手动将Templets重命名为:xinfu800.com_moban.上述所说的方法还可以修改插件目录.会员目

MySql重装以后,修改数据库路径,打开以前的数据库报Table &#39;XX库.XX表&#39; doesn&#39;t exist错误的解决办法

因为mysql主流的数据库引擎有MyISAM和InnoDB两种, 如果是MyISAM,直接把以前数据库拷贝到修改后的路径是可以的 但是InnoDB因为存储结构不同,必须还得把备份的innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件拷到修改后的合适路径 参考资料:http://www.bcty365.com/content-35-2928-1.html https://blog.csdn.net/dihuangtian01/article/details/5177353