复制
Modifying A Collection While Iterating Through It
有谁有一个很好的模式可以让我在循环遍历可枚举集合(例如字典中的IList或KeyValuePairs )时,避免无法删除对象的问题。
例如,以下内容失败,因为它修改了在foreach期间正在枚举的列表
foreach (MyObject myObject in MyListOfMyObjects)
{
     if (condition) MyListOfMyObjects.Remove(myObject);
}过去我用过两种方法。
我已经用反转的for循环替换了foreach (以便在删除对象时不要更改正在循环的任何索引)。
我还尝试存储一个新的对象集合,以便在to循环中删除,然后循环遍历该集合,并将对象从原始集合中删除。
这些都很好,但感觉都不太好,我想知道是否有人想出了一个更优雅的方法来解决这个问题。
发布于 2011-05-25 20:49:30
我刚看到这篇文章,想和大家分享一下。
void RemoveAll(object condition)  
{
    bool found = false;
    foreach(object thisObject in objects)    
    {
        if (condition)    
        {    
            objects.Remove(thisObject);
            found = true;
            break; //exit loop    
        }     
     }
    // Call again recursively
    if (found) RemoveAll(condition);
}https://stackoverflow.com/questions/404557
复制相似问题