在foreach循环中删除XElements
题
所以,我有一个错误,以除去
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。
不隶属于 StackOverflow