我想使用元素索引从XML列表中删除用户选择的元素。例如:
foreach (int index in indexes)
{
Root.Descendants("book").ElementAt(index).Remove();
}
但这会引发IndexOutOfRangeException
。任何建议都表示赞赏。
答案 0 :(得分:4)
删除项目时,剩余“book”元素(及其索引)的数量会发生变化。索引数组中可能有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();
}
现在,在删除元素或索引之前,您不必关心它们的顺序。