作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在一个循环中从我的 DataTable
dt
中删除一些行,但出现上述异常:
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 对其进行循环。
Foreach 查询枚举器并询问下一个元素。如果您删除一个项目,枚举器的状态将变为无效。枚举器必须存储一些指示其当前位置的日期。
你不应该这样做。也许使用另一个集合来跟踪更改或使用 concurrent collections (阅读链接中的类(class))
关于c# - 集合被修改;枚举操作可能不会在 Except 操作上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646059/
我是一名优秀的程序员,十分优秀!