gpt4 book ai didi

c# - 集合被修改;枚举操作可能不会在 Except 操作上执行

转载 作者:行者123 更新时间:2023-11-30 18:24:56 25 4
gpt4 key购买 nike

我试图在一个循环中从我的 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();
}

successBatchfailBatch 都是 dtDataTable 克隆。

在提出此错误的其他问题中,我们正在处理 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com