【问题标题】:C# There is no row at position ()C#位置()处没有行
【发布时间】:2021-12-22 04:30:06
【问题描述】:

我在处理现有的合并数据表代码时遇到问题,我似乎无法理解

我继承的所有其余代码,包括我必须修改的代码,都可以在这个例外情况下正常工作。我有 2 个数据表,第一个表是通过 .csv 提供的。第二个表是从其他来源提取的。

我遇到的问题是下面的代码返回以下错误:

位置(结束位置)没有行

我知道我应该寻找补救第二个表中的空值,但我需要在代码的其余部分返回空值。

上面的错误是用 for (int i-0) 行产生的吗?如果是这样,我将如何修改此合并操作?

    DataTable netb = MergeDataTables(dt, temp);
    return netb;

    static DataTable MergeDataTables(DataTable table1, DataTable table2)
    {
        DataTable table3 = table1.Copy();
        
        foreach (DataColumn dc in table2.Columns)
        {
            table3.columns.Add(dc.ColumnName).DataType = dc.DataType;
        }

        for (int i = 0; < table3.Rows.Count; i++)
        {
            foreach (DataColumn dc in table2.Columns)
            {
                string col = dc.ColumnName;
                table3.Rows[i][col] = table2.Rows[i][col];
            }
        }

【问题讨论】:

  • 请编辑您的问题并为您的函数添加示例输入数据。

标签: c# merge row


【解决方案1】:

我注意到您的 for 循环缺少 i,以完成 i &lt; table3.Rows.Count;

for (int i = 0; i < table3.Rows.Count; i++)

【讨论】:

  • 谢谢史蒂文。不幸的是,这只是一个转录错误。 (无复制粘贴)
  • 另一件事是当i 将用于数组时,你应该在for循环中使用Count - 1,因为数组从0开始,但Count开始在1
  • @BrianG 您应该编辑您的问题并: 1- 更正转录错误和 2- 添加导致错误的数据表的一些示例数据(很可能与数据相关,但还不够信息确定)。
【解决方案2】:

嘿@BrianG 可能你的 table3 比 table2 大,假设你的 table3 有 10 行,table2 有 5,当你在第七次迭代时,你的 table2 将尝试到达不存在的位置 6 table2,然后它抛出错误。您必须为此创建一个验证。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多