[英]Is it recommended to remove Row from DataTable while in Foreach loop?
如标题所述,是否建议在foreach循环中从数据表中删除数据行?
在这里,我到目前为止-
foreach (DataRow row in dt.Rows)
{
billObj.callerID = Convert.ToInt64(row["callerID"]);
billObj.bsRespond = billObj.chargePhone(billObj);
if (!billObj.bsRespond.StartsWith("OK"))
{
dt.Rows.Remove(row);
}
}
当然不是,您正在修改要迭代的集合。 当您尝试删除该行时,程序将崩溃。 您不能在使用为其创建的枚举器时修改集合, 否则它将抛出InvalidOperationException()
。
为什么不只使用另一个枚举器呢?
foreach (DataRow row in dt.Rows.Cast<DataRow>().ToArray())
{
...
}
如果没有“ RemoveAll(predicate)”,执行此操作的通常方法是保留清除列表(此处归纳为任何类型):
var remove = new List<SomeType>();
foreach(var row in source) {
if(condition) remove.Add(row);
}
foreach(var obj in remove) {
source.Remove(obj);
}
但是,在可用时:
source.RemoveAll(row => condition);
方法更简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.