从集合中删除

时间:2011-07-07 14:44:22

标签: c#-3.0 foreach

我有一个DataGridView集合对象并检查特定条件。如果它为null,那么我将它从DataGridView集合中删除。这是我的代码 -

foreach(DataGridViewRow dr in myDataGridViewRowCollection.Rows)
{
    string title = TypeConvert.ToString(dr.Cells[Name].Value);
    if(title == null)
        //Remove it from the list. 
        myDataGridViewRowCollection.Rows.Remove(dr);
}

现在,如果我在myDataGridViewRowCollection中有6行,那么其中5行的标题为null。现在,上面的代码只删除了5个中的3个而不是剩下的2个。

我有点理解这个问题,但我无法想到现在的解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

问题是你正在迭代它时改变myDataGridViewRowCollection.Rows集合,这会混淆/破坏迭代器。您需要将其分为两个步骤。首先列出你需要删除的内容,然后你可以删除它们。

var toRemove = myDataGridViewRowCollection.Rows.Where(x => x.Cells[Name].Value == null);

foreach(var row in toRemove){
    myDataGridViewRowCollection.Rows.Remove(row);
}