要素インデックスを使用して、ユーザーが選択した要素を XML リストから削除したいと考えています。例えば:
foreach (int index in indexes)
{
Root.Descendants("book").ElementAt(index).Remove();
}
しかし、これはIndexOutOfRangeException
. 任意の提案をいただければ幸いです。
要素インデックスを使用して、ユーザーが選択した要素を XML リストから削除したいと考えています。例えば:
foreach (int index in indexes)
{
Root.Descendants("book").ElementAt(index).Remove();
}
しかし、これはIndexOutOfRangeException
. 任意の提案をいただければ幸いです。
アイテムを削除すると、残りの「本」要素 (およびそのインデックス) の数が変化します。インデックス配列に 0、1、2、3 があるかもしれませんが、最初の項目を削除すると、4 番目のインデックス (3) は範囲外になります。インデックスが連続している場合は、要素を削除する順序を逆にすることができるため、現在のインデックスが「範囲外」になることはありません。
これを試して:
for (int i = indexes.Length - 1; i >= 0; i--)
{
Root.Descendants("book").ElementAt(indexes[i]).Remove();
};
ただし、「ユーザーが選択した」要素を削除したいとおっしゃっていたので、要素がランダムな順序になっている可能性があると思います。代わりに、次のようなことを試してみてください。
IEnumerable<XElement> books = Root.Descendants("book");
IList<XElement> booksToRemove = new List<XElement>(indexes.Length);
foreach (int index in indexes)
{
booksToRemove.Add(books.ElementAt(index));
}
foreach (XElement book in booksToRemove)
{
book.Remove();
}
これで、要素またはインデックスを削除する前に、その順序を気にする必要がなくなりました。