man*_*ani 8 c# foreach datarow
我有for-each循环,其中数据行被更新,因此异常,Collection被修改; 生成枚举操作可能不会执行.有什么办法解决吗?我见过To-List函数,但它没有使用数据行,这是我的代码:
foreach (DataRow row in dataTable.Rows) {
temp = row[0].ToString();
foreach (DataRow rows in dataTable.Rows) {
if (temp == rows[0].ToString()) {
tempdatatable.Rows.Add(row[0],row[1]);
dataTable.Rows.Remove(rows);
//Update happens here
}
tempdatatable.DefaultView.Sort = "gscitations DESC";
dataGridView1.DataSource = tempdatatable;
}
}
Run Code Online (Sandbox Code Playgroud)
使用Enumerator枚举它时无法修改集合,这发生在foreach语句的场景(MDSN链接)之后.
解决此问题的一种可能方法是在第一个枚举中收集要删除的行,然后在单独的循环中删除它们,如下所示:
var rowsToDelete = new List<DataRow>();
foreach (DataRow row in dataTable.Rows)
{
temp = row[0].ToString();
foreach (DataRow rows in dataTable.Rows)
{
if (temp == rows[0].ToString())
{
tempdatatable.Rows.Add(row[0],row[1]);
rowsToDelete.Add(rows);
}
tempdatatable.DefaultView.Sort = "gscitations DESC";
dataGridView1.DataSource = tempdatatable;
}
}
rowsToDelete.ForEach( x => dataTable.Rows.Remove(x) );
Run Code Online (Sandbox Code Playgroud)
您也可以用foreach循环替换循环for,但是在删除元素时需要执行额外的工作来正确处理当前索引.
尝试这个 :
for (int i = 0; i < dataTable.Rows.Count; i++)
{
var tempRow = dataTable.Rows[i];
var temp = dataTable.Rows[i][0];
for (int j = 0; j < dataTable.Rows.Count; j++)
{
DataRow rows = dataTable.Rows[j];
if (temp == rows[0].ToString())
{
tempdatatable.Rows.Add(tempRow[0], tempRow[1]);
dataTable.Rows.Remove(rows); //Update happen here
}
tempdatatable.DefaultView.Sort = "gscitations DESC";
dataGridView1.DataSource = tempdatatable;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31954 次 |
| 最近记录: |