我有一个名为_longDataTable
的现有数据表,其中包含数据。现在,我想复制每一行,并且在该行的每个副本中,我只想根据来自另一数据表SheetCode
的值设置values
列中的值,请参见下面的代码。例如,values
数据表包含1、2和3,然后我希望将_longDataTable
的每一行重复三遍,并且在每一行中,我希望Sheet Code
列分别具有值1、2和3。我的代码现在如下所示:
foreach (DataRow sheets in _longDataTable.Rows)
{
for(int k = 0; k < number_of_sheets; k++)
{
var newRowSheets = _longDataTable.NewRow();
newRowSheets.ItemArray = sheets.ItemArray;
newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];
//add edited row to long datatable
_longDataTable.Rows.Add(newRowSheets);
}
}
但是,出现以下错误:
Collection was modified; enumeration operation might not execute.
有人知道此错误来自何处以及如何解决我的问题吗?
答案 0 :(得分:0)
您会得到枚举错误,因为您正在遍历循环中正在更改的集合(已向其中添加新行),
正如您在评论中说的那样,由于要在_longDataTable上进行迭代,因此您将获得内存不足异常,然后向其中添加行,迭代将永远不会结束,并且您将摆脱内存异常。
我认为这可以为您提供帮助:
//assume _longDataTable has two columns : column1 and SheetCode
var _longDataTable = new DataTable();
var duplicatedData = new DataTable();
duplicatedData.Columns.Add("Column1");
duplicatedData.Columns.Add("SheetCode");
foreach (DataRow sheets in _longDataTable.Rows)
{
for (int k = 0; k < number_of_sheets; k++)
{
var newRowSheets = duplicatedData.NewRow();
newRowSheets.ItemArray = sheets.ItemArray;
newRowSheets["SheetCode"] = values.Rows[k]["Sheet Code"];
newRowSheets["Column1"] = "anything";
//add edited row to long datatable
duplicatedData.Rows.Add(newRowSheets);
}
}
_longDataTable.Merge(duplicatedData);
请勿修改_longDataTable,将行添加到临时表(具有相同的架构),并在迭代后合并两个数据表。