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を呼び出すことが二つの要素は、(「X」)であり、最初に削除された場合、ループは第2のXエレメントに到達しないことをforeachのよう変化させることである。
それでは、どのように私はこれをループする必要がありますか?それとも、これは別の道を書き換えるべき?
解決
私は、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