collections被修改; 枚举操作可能无法在Except操作上执行
我试图从循环中的DataTable
dt
中删除一些行,我得到上述exception:
while (dt.Rows.Count > 0 && retry < Globals.PushRetryLimit) { var query = dt.AsEnumerable().Except(successBatch.AsEnumerable(), DataRowComparer.Default) .AsEnumerable().Except(failBatch.AsEnumerable(), DataRowComparer.Default); if (dt.AsEnumerable().Any()) dt = query.CopyToDataTable(); }
successBatch
和failBatch
都是dt
DataTable
克隆。
在提出此错误的其他问题中,我们正在处理foreach
循环。 为什么会出现此错误?
堆栈跟踪:
at System.Data.DataTableExtensions.LoadTableFromEnumerable[T](IEnumerable`1 source, DataTable table, Nullable`1 options, FillErrorEventHandler errorHandler) at System.Data.DataTableExtensions.CopyToDataTable[T](IEnumerable`1 source)
您正在使用foreach循环遍历集合中的元素(您的dataTable)。
Foreach查询枚举器并询问下一个元素。 如果删除项目,则枚举器的状态将变为无效。 枚举器必须存储一些日期,指示其当前位置。
你不应该这样做。 也许使用另一个集合来跟踪更改或使用并发集合 (阅读链接中的类)