0

要素インデックスを使用して、ユーザーが選択した要素を XML リストから削除したいと考えています。例えば:

foreach (int index in indexes)
{
    Root.Descendants("book").ElementAt(index).Remove();
}

しかし、これはIndexOutOfRangeException. 任意の提案をいただければ幸いです。

4

1 に答える 1

4

アイテムを削除すると、残りの「本」要素 (およびそのインデックス) の数が変化します。インデックス配列に 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();
}

これで、要素またはインデックスを削除する前に、その順序を気にする必要がなくなりました。

于 2012-08-06T20:03:05.370 に答える