.net - 在 foreach 循环中删除 XElement

标签 .net c#-3.0 foreach xelement

所以,我有一个错误要删除

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

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

问题是调用 x.Remove() 会改变 foreach,如果有两个 Elements("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();
    }
}

关于.net - 在 foreach 循环中删除 XElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1532818/

相关文章:

c# - 对在Docker容器上运行的C#dot net应用程序进行性能分析

c# - 多个消费者不丢失消息

php - 获取列内容作为数组键

javascript - Node.js:async.series 中的 forEach

c# - 在 Tpl 中处理异常

c# - 在 C# NET 中运行 Java 应用程序

c#-3.0 - Parallel.For System.OutOfMemoryException

c#-3.0 - 3.5 上的动态结果集

c# - 这个C#泛型代码能不能精简,只传一个类型?

javascript - 如何返回对象数组属性的总和而不是它们的 double ?