繁体   English   中英

是否建议在Foreach循环中从DataTable中删除Row?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM