博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
for循环遍历枚举过程中怎么删除集合中的项
阅读量:5091 次
发布时间:2019-06-13

本文共 944 字,大约阅读时间需要 3 分钟。

在一次对Datatable的遍历过程中,我对其中的一个row进行了一次remove,然后就报错了,提示“集合已修改;枚举操作可能无法执行。”,错误代码大概是这样

DataTable dt = new DataTable();                foreach (DataRow dr in dt.Rows)                {                    if (dr[0].ToString() == "test")                    {                        dt.Rows.Remove(dr);                    }                }

然后查了查,了解到换成Delete,然后再AccepteChanges即可,正确的代码是这样:

DataTable dt = new DataTable();                foreach (DataRow dr in dt.Rows)                {                    if (dr[0].ToString() == "test")                    {                        dr.Delete();                    }                }                dt.AcceptChanges();

具体原因如下:

delete和remove

 Delete的使用是 datatable.Rows[i].Delete();

Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);

这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改.

而Remove方法则是直接删除.

转载于:https://www.cnblogs.com/simpleplum/p/7840071.html

你可能感兴趣的文章
让 framset 框架中的页面全屏显示
查看>>
对于Spring使用注解的一点总结
查看>>
tomcat 解析(五)-Tomcat的核心组成和启动过程
查看>>
linux mysql
查看>>
UEP-find查询
查看>>
C++内存模型
查看>>
range和xrange的区别详解
查看>>
su: Authentication failure问题
查看>>
P1334 瑞瑞的木板
查看>>
RedHat AS4 U4 kernel-2.6.9-5 --> kernel-2.6.9-42 升级
查看>>
章节八、2-火狐的插件TryXPath
查看>>
DLL(OCX)文件注册与反注册方法(regsvr32用法)
查看>>
android.graphics.Paint方法setXfermode (Xfermode x...
查看>>
iOS开发之让你的应用“动”起来
查看>>
android studio怎么添加.so文件?android studio加载so文件的方法
查看>>
LeetCode - Reverse Linked List II
查看>>
SSD果然劲爆!
查看>>
排序算法总结
查看>>
如何快速理解一个全新的嵌入式操作系统(转载)
查看>>
国泰安面试总结
查看>>