【问题标题】:combine foreach and for loop using C#使用 C# 组合 foreach 和 for 循环
【发布时间】:2014-01-26 10:33:53
【问题描述】:

我有一些循环遍历我的数据表的代码,我很好地使用了item 变量。但我的问题是i 需要迭代,它需要从它所在的最后一个数字+1。 foreach 完成后,它需要退出循环。

private void button2_Click(object sender, EventArgs e)
{
    CreateExcelDoc excell_app = new CreateExcelDoc();
    //creates the main header

    COLUMNSTableAdapter adapterTableName = new COLUMNSTableAdapter();

    DataTable table = adapterTableName.GetData(tableName); // Get the data table.
    foreach (DataRow row in table.Rows) // Loop over the rows.
    {
        foreach (var item in row.ItemArray) // Loop over the items.
        {

            for (int i = 1; i < 30; i++)
            {
                excell_app.createHeaders(1, 1, "" + item + "", i, i, 1, "black", false, 10, "n");
            }

        }
    }
}

【问题讨论】:

  • 我的代码在到达数据表的下一行之前会循环 30 次。这是错误的,我试图将计数定义为数据表中项目的计数
  • 你需要计算细胞数量吗?
  • 你能澄清一下这个问题吗?你有 3 个答案,但似乎没有人能够弄清楚你想要这段代码做什么。大局观。

标签: c# winforms loops for-loop foreach


【解决方案1】:

在您发表评论后,您可以使用另一个变量:
正如@Grundy 在评论中所建议的那样——如果你使用一个数组,你可以使用它的长度:

int j = 1;
foreach (DataRow row in table.Rows) // Loop over the rows.
{
    for (int i = 0; i < row.ItemArray.Length; i++, j++)
    {
       excell_app.createHeaders(1, 1, "" + row.ItemArray[i] + "", j, j, 1, "black", false, 10, "n");
    }
}

【讨论】:

  • ItemArray 是数组,所以它没有Count 属性,请改用Length
  • 所有i 需要做的就是在每次有新的item 时递增。一旦没有更多项目,i 必须停止递增。
  • @Grundy 谢谢,没错,我希望 OP 的 ItemArray 是一个数组 :)
  • 错误:Error 1 foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'
  • @PriceCheaperton 看来我更幸运地猜到了你想做什么。请尝试更好地描述您的问题 - 这样可以节省您的时间和其他人的精力。
【解决方案2】:

我的代码在到达数据表的下一行之前将循环 30 次。这是错误的,我试图将计数定义为数据表中项目的计数

那你为什么不使用这样的 for 循环呢?

for(int i = 1; i< row.ItemArray.Length+1; i++)
{
   var item = row.ItemArray[i];
   excell_app.createHeaders(1, 1, "" + item + "", i, i, 1, "black", false, 10, "n");
}

【讨论】:

  • 不,因为i 实际上甚至没有循环
  • 所有i 需要做的就是每次有新的item 时递增。一旦没有更多项目,i 必须停止递增。
  • @PriceCheaperton 所以你希望i 成为决赛中的总项目数?
  • i 只是一个引用 Excel 列范围的递增值。例如,[1,1],在我的代码中,i,i。所以每次我得到一个新的item 我应该有一个新的递增i。因此,如果我的数据表中的项目总数为 3。我希望最后一个递增的 i3
  • @PriceCheaperton 嗯,所以我应该是当前行的列数?
【解决方案3】:

编辑:

所有i 需要做的就是在每次有新项目时递增。一旦没有更多的项目,我必须停止增加。

在这种情况下,我需要写一些东西来阻止它回到零新行..

int i = 0;
foreach (DataRow row in table.Rows) // Loop over the rows.
{
    foreach (var item in row.ItemArrai) // Loop over the items.
    {
        i++;
        for (int j = 1; j < 30; j++)
        {
            excell_app.createHeaders(1, 1, "" + item + "", j, j, 1, "black", false, 10, "n");
        }
    }
}
Console.WriteLine(i);   

【讨论】:

  • 这不会改变任何事情
  • 这将循环 30 次,然后才能到达数据表中的下一行。我正在尝试将计数定义为数据表中项目的计数。
  • 所有i 需要做的就是每次有新的item 时递增。一旦没有更多项目,i 必须停止递增。
  • 不应该增加 30 倍!
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 2015-05-08
  • 2016-02-26
  • 2020-09-18
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多