如何在 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# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引?