查询集合已修改;可能无法执行枚举操作
2008-11-11 10:21
281 查看
以前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些。
今天写了个FOREARCH循环来操作删除某个 collection的元素,出现异常:查询集合已修改;可能无法执行枚举操作
查了一下,这个是使用foreach的典型的问题。
foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。
要避免这个问题,就应该使用for循环。
//************************************************
问题:在foreach里进行循环row.delete()的是否有时候可以,有时候却不可以会报如下错误:
集合已修改;枚举操作可能无法执行。
经过调试发现问题所在了:foreach里进行循环row.delete()的时候,行的状态必须是Unchanged,才可以的,新增加的行里的状态是Added,然后抛出了刚才说的异常。
所以要使用DataTable的 AcceptChanges() 方法把新增加的行的状态置为Unchanged以确认在DataTable里的更改。然后在循环删除的行的时候Row.elete() ,这些行的状态就被置为Deleted了。不需要删除的行还得通过SetAdded()方法来置回原来的Added状态。 这样在DataAdapter里对数据源进行更新的时候,就可以把新增加的记录更新到数据库里去了。
今天写了个FOREARCH循环来操作删除某个 collection的元素,出现异常:查询集合已修改;可能无法执行枚举操作
查了一下,这个是使用foreach的典型的问题。
foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。
要避免这个问题,就应该使用for循环。
//************************************************
问题:在foreach里进行循环row.delete()的是否有时候可以,有时候却不可以会报如下错误:
集合已修改;枚举操作可能无法执行。
经过调试发现问题所在了:foreach里进行循环row.delete()的时候,行的状态必须是Unchanged,才可以的,新增加的行里的状态是Added,然后抛出了刚才说的异常。
所以要使用DataTable的 AcceptChanges() 方法把新增加的行的状态置为Unchanged以确认在DataTable里的更改。然后在循环删除的行的时候Row.elete() ,这些行的状态就被置为Deleted了。不需要删除的行还得通过SetAdded()方法来置回原来的Added状态。 这样在DataAdapter里对数据源进行更新的时候,就可以把新增加的记录更新到数据库里去了。
相关文章推荐
- 解决点击关闭按钮,应用程序退出时,系统爆出“集合已修改,可能无法执行枚举操作”异常的相关思路
- 【C#】集合已修改;可能无法执行枚举操作。
- 集合已修改;可能无法执行枚举操作.
- 黄聪:C#使用能够foreach对hashtable、List遍历时“集合已修改;可能无法执行枚举操作。”错误
- 集合已修改;可能无法执行枚举操作。
- 集合已修改;可能无法执行枚举操作
- NET 集合已修改 可能无法执行枚举操作 C#
- C#中出现“集合已修改;可能无法执行枚举操作”错误 foreach list.Remove()
- 集合已修改;可能无法执行枚举操作。
- 集合已修改;可能无法执行枚举操作 for 与foreach
- 集合已修改;枚举操作可能无法执行。
- C#中foreach出现“集合已修改 可能无法执行枚举操作”的解决方法
- 集合已修改;可能无法执行枚举操作
- 集合已修改;可能无法执行枚举操作。
- 集合已修改;枚举操作可能无法执行。使用foreach 循环删除DataRow的时候的问题! 该死的AcceptChanges() Row.elete() Remove(Row)使用不同。
- [C#]集合已修改;可能无法执行枚举操作
- 集合已修改 ;可能无法执行枚举操作 Dictionary
- 集合已修改;枚举操作可能无法执行
- 集合已修改;可能无法执行枚举操作。
- C#使用List出现“集合已修改;可能无法执行枚举操作”错误的解决办法