Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net XElement.Remove(XNode.Remove)不';行不通_Vb.net_Linq To Xml_Xelement - Fatal编程技术网

Vb.net XElement.Remove(XNode.Remove)不';行不通

Vb.net XElement.Remove(XNode.Remove)不';行不通,vb.net,linq-to-xml,xelement,Vb.net,Linq To Xml,Xelement,我试图从父节点中删除单个节点,我尝试了该方法,但似乎不起作用。这是怎么做到的?这是虫子还是什么 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://

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

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
Sub-Main()
dimXML=
Dim products=xml.Root。
'作品-取消注释
'products.Remove()
“不行
对于产品中的每个产品
product.Remove()
下一个
xml.Save(失败文件名)
端接头

产品上循环时删除节点会导致对其进行修改。由于它是一个
IEnumerable
,为了一次处理整个结果,您需要避免延迟求值。为此,只需添加对
ToArray()
ToList()的调用即可:

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

Dim temp = products.ToArray()
For Each product In temp
    product.Remove()
Next
您遇到的问题在这个MSDN页面上得到了很好的总结:,特别是标题为“在迭代时删除”的部分


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

产品中没有任何
Remove(t)
方法<代码>产品。删除(产品)
什么是“不工作”的意思?@JohnSaunders这意味着元素仍然存在于其父元素下。
Dim temp = products.ToArray()
For Each product In temp
    product.Remove()
Next