0

我想使用元素索引从 XML 列表中删除用户选择的元素。例如:

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

但这会抛出一个IndexOutOfRangeException. 任何建议表示赞赏。

4

1 回答 1

4

当您删除项目时,剩余的“书”元素(及其索引)的数量会发生变化。您的索引数组中可能有 0、1、2、3,但是一旦您删除第一项,您的第四个索引 (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 回答