首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XElement.Remove (XNode.Remove)不工作

XElement.Remove (XNode.Remove)不工作
EN

Stack Overflow用户
提问于 2011-10-10 09:50:06
回答 1查看 1.4K关注 0票数 2

我试图从它们的父节点中删除单个节点,我尝试了Remove方法,但它似乎不起作用。这是怎么做的?这是个bug还是什么?

代码语言:javascript
复制
Sub Main()
  Dim xml =
    <?xml version="1.0" encoding="utf-8"?>
    <Products>
      <Product name="ABC-1" link="http://www.site.com/1"/>
      <Product name="ABC-2" link="http://www.site.com/2"/>
      <Product name="ABC-3" link="http://www.site.com/3"/>
    </Products>

  Dim products = xml.Root.<Product>

  'works - uncomment
  'products.Remove()

  'Doesn't work
  For Each product In products
    product.Remove()
  Next

  xml.Save(FailedFilename)
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-11 12:05:29

products上循环时删除节点会导致它被修改。因为它是一个IEnumerable<XElement>,所以你需要避免懒惰的计算,以便一次处理整个结果。为此,只需添加对ToArray()ToList()的调用

代码语言:javascript
复制
For Each product In products.ToArray()
    product.Remove()
Next

请注意,上面的代码相当于下面的代码片段。这与在声明products变量的同时添加ToArray()不同:

代码语言:javascript
复制
Dim temp = products.ToArray()
For Each product In temp
    product.Remove()
Next

您遇到的问题在这个MSDN页面上进行了很好的总结:Mixed Declarative Code/Imperative Code Bugs,特别是标题为“在迭代时删除”的部分。

除非您需要在删除每个product之前使用它,否则使用Remove extension method的第一种方法要简单得多:products.Remove()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7707836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档