如何在 C# foreach 中获取索引

Posted

技术标签:

【中文标题】如何在 C# foreach 中获取索引【英文标题】:How to get index in C# foreach 【发布时间】:2021-09-28 15:07:41 【问题描述】:

我正在循环我的表格数据并尝试将表格行放在 excel 文件中,但我需要获取每一行的索引才能在我的 excel 文件中创建行。

foreach (DataRow row in dt.Rows)

  xlWorkSheet.Cells[2, 1] = row["Id"].ToString();
  xlWorkSheet.Cells[2, 2] = row["ProductId"].ToString();
  xlWorkSheet.Cells[2, 3] = row["OrderQuantity"].ToString();
  xlWorkSheet.Cells[2, 4] = row["CustomerID"].ToString();
  xlWorkSheet.Cells[2, 5] = row["OrderDate"].ToString();
  xlWorkSheet.Cells[2, 6] = row["Tax"].ToString();
  xlWorkSheet.Cells[2, 7] = row["Total"].ToString();
  xlWorkSheet.Cells[2, 8] = row["Net"].ToString();

我所需要的只是将xlWorkSheet.Cells[2, 8] 中的2(excel 行号)替换为foreach index 数字,而不是静态row 2,它将是row 3, 4,5,6,...,具体取决于我有多少行数据库。

有什么建议吗?

【问题讨论】:

使用在循环外声明并在其中递增的局部变量,或切换到 for 循环 for(int i = 0; i 这能回答你的问题吗? How do you get the index of the current iteration of a foreach loop? @T.Schwarz 对不起,我不明白!那么我如何获得我的row["Id"] 你可以使用 LINQ:foreach(var (row,index) in dt.Rows.Select((v,i) => (v,i))) int rowcount = 0; foreach(dt.Rows 中的 DataRow 行) xlWorkSheet.Cells[rowcount, 1] = row["Id"].ToString(); ....... 行数++; 【参考方案1】:

您可以在 foreach 循环之外初始化一个局部变量并将其递增到最后一行。这将保留当前行。例如

int i=0; 
foreach (DataRow row in dt.Rows) 


xlWorkSheet.Cells[i, 1] = row["Id"].ToString(); 
i++; 
 

【讨论】:

我的荣幸 :) 编码愉快【参考方案2】:

您可以在每次迭代时声明一个 int 增量。 例如(伪代码):

    int count = 0;
    foreach (DataRow row in dt.Rows)
    
      xlWorkSheet.Cells[count, 1] = row["Id"].ToString();
      ...
      xlWorkSheet.Cells[count, 8] = row["Net"].ToString();
      count ++;
    

如果适合您的需要,您当然可以从 2 开始初始化 count 的值。它只会增加它。

【讨论】:

以上是关于如何在 C# foreach 中获取索引的主要内容,如果未能解决你的问题,请参考以下文章

如何通过索引 C# 访问对象 [关闭]

c# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引?

如何在 ASP.NET C# 中使用 foreach 获取 CheckBoxList 中选定项目的值?

我如何在每个循环中获取索引,并且如何执行1个以上的操作?

c#并行foreach循环查找索引

使用 foreach 迭代时如何知道行索引?