在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。
链接地址: http://www.djcxy.com/p/21323.html上一篇: Removing XElements in a foreach loop
下一篇: Is it must to learn all the other versions of c# before starting with c# 4.0?