集合已修改;可能无法执行枚举操作
2012-08-08 12:44
525 查看
foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。要避免这个问题,就应该使用for循环。
以前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些。今天写了个foreach循环来遍历一个list,之后在foreach体内又对其添加,表面上逻辑和写法看着没错,但在运行时出现异常:查询集合已修改;可能无法执行枚举操作。查了一下,这个是使用foreach的典型的问题。
附错误demo代码:
最后抛出异常:集合已修改;可能无法执行枚举操作。
正确代码如下:
以前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些。今天写了个foreach循环来遍历一个list,之后在foreach体内又对其添加,表面上逻辑和写法看着没错,但在运行时出现异常:查询集合已修改;可能无法执行枚举操作。查了一下,这个是使用foreach的典型的问题。
附错误demo代码:
try { List<string> lsts = new List<string>(); lsts.Add("1"); lsts.Add("2"); lsts.Add("3"); lsts.Add("4"); lsts.Add("2"); lsts.Add("6"); lsts.Add("1"); lsts.Add("8"); lsts.Add("9"); lsts.Add("10"); int count = 0; int countreus = 0; List<string> lstresult = new List<string>(); foreach (string a in lsts) { count++; if (count == 1) { lstresult.Add(a); } else { if (count == lsts.Count) { count = 0; } else { foreach (string b in lstresult) { countreus++; if (b.Contains(a.Trim())) { break; } else { if (countreus == lstresult.Count) { lstresult.Add(a); } } } } } } } catch (Exception ex) { throw; }
最后抛出异常:集合已修改;可能无法执行枚举操作。
正确代码如下:
try { List<string> lsts = new List<string>(); lsts.Add("1"); lsts.Add("2"); lsts.Add("3"); lsts.Add("4"); lsts.Add("2"); lsts.Add("6"); lsts.Add("1"); lsts.Add("8"); lsts.Add("9"); lsts.Add("10"); int count = 0; int countreus = 0; List<string> lstresult = new List<string>(); foreach (string a in lsts) { count++; if (count == 1) { lstresult.Add(a); } else { if (count == lsts.Count) { count = 0; } else { for (int i = 0; i < lstresult.Count; i++) { countreus++; if (lstresult[i].Contains(a.Trim())) { break; } else { if (countreus == lstresult.Count) { lstresult.Add(a); } } } } } } } catch (Exception ex) { throw; }
相关文章推荐
- C#中出现“集合已修改;可能无法执行枚举操作”错误 foreach list.Remove()
- for遍历Dictionary字典 解决foreach修改字典报集合已修改:可能无法执行枚举操作
- Dictionary的错误“集合已修改;可能无法执行枚举操作。”
- C#--集合已修改;可能无法执行枚举操作。
- 怎么回事儿?C#错误:集合已修改;枚举操作可能无法执行。
- [C#]集合已修改;可能无法执行枚举操作
- C# 集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作.
- 黄聪:C#使用能够foreach对hashtable、List遍历时“集合已修改;可能无法执行枚举操作。”错误
- [错误]集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作.
- 【转】集合已修改;可能无法执行枚举操作
- 集合已修改;枚举操作可能无法执行。使用foreach 循环删除DataRow的时候的问题! 该死的AcceptChanges() Row.elete() Remove(Row)使用不同。
- C# 集合已修改;可能无法执行枚举操作
- 黄聪:C#使用能够foreach对hashtable、List遍历时“集合已修改;可能无法执行枚举操作。”错误
- 集合已修改;可能无法执行枚举操作 for 与foreach
- C#中foreach出现“集合已修改 可能无法执行枚举操作”的解决方法
- 集合已修改;可能无法执行枚举操作。
- 集合已修改;枚举操作可能无法执行。
- {"集合已修改;可能无法执行枚举操作。"}