如果我执行以下代码片段:
IXLRange dataRange = worksheet.Range(1, 1, myData.Count, 4);
foreach (var row in dataRange.Rows()) {
//int cells = row.CellCount();
if (isEndOfGroup) {
row.InsertRowsBelow(1);
var rowBelow = row.RowBelow();
// Do stuff with the added row, like adding a subtotal
}
}
这里到底发生了什么?看起来正在迭代的行集正在更新,这就是我想要发生的事情,因为注释掉的行抛出了一个错误"范围无效"在下一次迭代中,好像该行还没有初始化。
我理解在迭代它时修改一个集合是不好的做法,但我之前没有遇到任何问题。
实现这一目标的另一种方法是什么?
答案 0 :(得分:0)
永远不要在迭代时修改集合......这是一个出价。 利用for循环。 如果之前没有引发异常,那么您只是更改了行的内容,而不是行本身的引用。
答案 1 :(得分:-1)
我最终使用了一个for
循环,正如Bagerfahrer建议的那样,并有一个第二个计数器来跟踪行号:
int rowNum = 1; // Row numbering starts at 1
for (int i = 0; i < myData.Count; i++) {
var row = worksheet.Row(rowNum);
if (isEndOfGroup) {
row.InsertRowsBelow(1);
rowNum++;
var rowBelow = row.RowBelow();
// Do stuff with the added row, like adding a subtotal
}
rowNum++;
}
这允许我索引myData
以检索数据,并跟踪我在电子表格中写到的位置。