我想使用元素索引从 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,但是一旦您删除第一项,您的第四个索引 (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();
}
现在您不必关心元素或索引在删除它们之前的顺序。