C# 尝试在c中复制DataTable中的行时出错#

C# 尝试在c中复制DataTable中的行时出错#,c#,visual-studio,C#,Visual Studio,我有一个名为\u longDataTable的现有数据表,其中包含数据。现在,我想复制每一行,在每一行的副本中,我只想根据名为values的不同数据表中的值设置SheetCode列中的值,请参见下面的代码。例如,值数据表包含1、2和3,然后我希望\u longDataTable的每一行被复制三次,并且在每个复制的行中,我希望工作表代码列分别具有值1、2和3。我的代码现在如下所示: foreach (DataRow sheets in _longDataTable.Rows) { for(i

我有一个名为
\u longDataTable
的现有数据表,其中包含数据。现在,我想复制每一行,在每一行的副本中,我只想根据名为
values
的不同数据表中的值设置
SheetCode
列中的值,请参见下面的代码。例如,
数据表包含1、2和3,然后我希望
\u longDataTable
的每一行被复制三次,并且在每个复制的行中,我希望
工作表代码
列分别具有值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);
   }
} 

有人知道这个错误是从哪里来的,以及如何解决我的问题吗?

您会遇到枚举错误,因为您正在循环中迭代一个正在更改的集合(向其中添加了新行)

正如您在评论中所说的,您得到了内存不足异常,因为您正在对_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有两列:column1和SheetCode
var_longDataTable=新数据表();
var duplicatedData=新数据表();
重复数据。列。添加(“列1”);
重复数据。列。添加(“SheetCode”);
foreach(longDataTable.Rows中的数据行表)
{
对于(int k=0;k<张数;k++)
{
var newRowSheets=duplicatedData.NewRow();
newRowSheets.ItemArray=sheets.ItemArray;
newRowSheets[“SheetCode”]=值。行[k][“SheetCode”];
newRowSheets[“Column1”]=“任何内容”;
//将编辑的行添加到长数据表
重复数据.Rows.Add(newRowSheets);
}
}
_longDataTable.Merge(duplicatedData);

不要修改_longDataTable,将行添加到临时表(使用相同的架构),并在迭代后合并两个数据表。

最简单的方法是
foreach(在_longDataTable.rows.Cast().ToList()中的数据行表)
。使用
数据表
枚举器时无法添加新行。出现错误,因为
长数据表
foreach
中是不可变的。有关详细信息,请转到。因此,使用另一种方法,如临时/辅助方法storage@Tetsuya你知道我为什么会得到这样的结果:“抛出了'System.OutOfMemoryException'类型的异常。”使用方法时出错?你还知道如何处理_longDataTable有两列以上的情况吗?你只需要添加尽可能多的duplicatedData.columns.add(“您的列名”);这是您需要的。不幸的是,它给出了以下错误:“输入数组长于此表中的列数。“这是一个伪代码,你应该为它编写自己的自定义代码。你不能只是复制粘贴然后期望它运行。
            //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);