我试图从它们的父节点中删除单个节点,我尝试了Remove方法,但它似乎不起作用。这是怎么做的?这是个bug还是什么?
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发布于 2011-10-11 12:05:29
在products上循环时删除节点会导致它被修改。因为它是一个IEnumerable<XElement>,所以你需要避免懒惰的计算,以便一次处理整个结果。为此,只需添加对ToArray()或ToList()的调用
For Each product In products.ToArray()
product.Remove()
Next请注意,上面的代码相当于下面的代码片段。这与在声明products变量的同时添加ToArray()不同:
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()。
https://stackoverflow.com/questions/7707836
复制相似问题