帮助“集合已被修改;枚举操作可能无法执行”。

时间:2011-08-18 15:14:57

标签: c# collections

当我使用以下代码时,我收到“收集已修改;枚举操作可能无法执行”错误。如果我理解正确,我认为这意味着我无法枚举此数据表并同时从中删除行。我的问题是,我还能做些什么来实现从我的数据表中删除某些行的结果? 这是我的代码:

        // Now let's loop through the datatable and find any account with no
        // LYSMKWh value and less than 4000 KWh current usage.  We'll remove those
        // from the datatable.
        currentRow = 0;
        foreach (DataRow row in resultsDT.Rows)
        {
            if ((string)resultsDT.Rows[currentRow]["LYSMKWh"] == "0")
            {
                int intKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["KWH"]);
                if (intKWh < 5000)
                {
                    resultsDT.Rows[currentRow].Delete();                        
                }
            }
            resultsDT.AcceptChanges();
            currentRow++;
        }

1 个答案:

答案 0 :(得分:2)

你可以做以下两件事之一:

1)您可以使用for循环以相反的顺序迭代集合并删除内联行:

for(int i = resultsDT.Rows.Count - 1; i >= 0; i--)
{
    if ((string)resultsDT.Rows[i]["LYSMKWh"] == "0")
    {
        int intKWh = Convert.ToInt32(resultsDT.Rows[i]["KWH"]);
        if (intKWh < 5000)
        {
            resultsDT.Rows[i].Delete();                        
        }
    }
    resultsDT.AcceptChanges();
}

2)您可以将要删除的行添加到单独的集合中,然后在迭代整个原始集合后将其删除。这显然效率较低,所以我不会担心样本。