所以,我有一个错误,以除去

foreach (XElement x in items.Elements("x")) 
{
    XElement result = webservice.method(x);

    if (/*condition based on values in result*/) 
    {
        x.Remove();
    }
}

的问题是,调用x.Remove()改变的foreach使得如果有两个元素(“X”),以及所述第一被去除时,环不到达第二X元素

那么我应该如何进行循环呢?或者,这应该改写另一种方式?

有帮助吗?

解决方案

我怀疑LINQ的可能能够如下,以帮助你在这里。

using System.Linq;

void foo()
{
    items.Elements("x")
         .Where(x => condition(webservice.method(x)))
         .Remove();
}

如果不工作(即,内部枚举仍然无效),使所选择的元素的浅拷贝和删除它们如下:

using System.Linq;

void foo()
{
    List xElements = items.Elements("x")
                          .Where(x => condition(webservice.method(x)))
                          .ToList();

    for (int i = xElements.Count - 1; i > -1; i--)
    {
        xElements[i].Remove();
    }
}

其他提示

环路逻辑之前创建的集合,添加的元素被除去到新的集合,则调用items.Remove新集合中的每个元件上。

尝试没有一个为取代的foreach。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top