Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
C# XmlNode RemoveAll()使由其他变量持有的节点的引用为空_C#_.net - Fatal编程技术网

C# XmlNode RemoveAll()使由其他变量持有的节点的引用为空

C# XmlNode RemoveAll()使由其他变量持有的节点的引用为空,c#,.net,C#,.net,我正在尝试从根目录中除去需要存在的子节点之外的所有子节点,下面是我写的 XmlNode root = XmlTemplate.DocumentElement; string targetPrefix = root.Prefix; var xmlNamespaceManager = new XmlNamespaceManager(XmlTemplate.NameTable);

我正在尝试从根目录中除去需要存在的子节点之外的所有子节点,下面是我写的

                XmlNode root = XmlTemplate.DocumentElement;

                string targetPrefix = root.Prefix;
                var xmlNamespaceManager = new XmlNamespaceManager(XmlTemplate.NameTable);
                xmlNamespaceManager.AddNamespace(root.Prefix, root.NamespaceURI);
                XmlNodeList nodeList = null;
                if (!String.IsNullOrEmpty(targetPrefix))
                {
                    nodeList = root.SelectNodes("descendant::" + targetPrefix + ":fields", xmlNamespaceManager);
                }
                else
                {
                    nodeList = root.SelectNodes("descendant::fields");
                }
正如预期的那样,我能够在nodeList中获得所需的节点。我可以在调试模式下运行该节点。当下面的代码语句运行时,就会出现混乱

root.RemoveAll();
root.AppendChild(nodeList[0]);
据我所知,子节点仍在nodeList中引用,因此对象不会被垃圾收集,但在root.RemoveAll()执行nodeList后,该对象将变为空

root.innexText=”“也做同样的事情

XML方法有什么不同吗?我误解了哪个概念…

上面说:

此方法返回的XmlNodeList对象将有效,而基础文档保持不变。如果基础文档发生更改,可能会返回意外结果(不会引发异常)

因此,结果似乎在某种程度上与底层Xml文档相耦合。调用更改文档后,
XmlNodeList
的任何特定行为都不会得到保证

因此,在您的情况下,在从文档中删除节点之前,复制节点列表的内容应该是最安全的:

var nodes = nodeList.Cast<XmlNode>().ToArray();
var nodes=nodeList.Cast().ToArray();
这使用来自的一些扩展方法将
XmlNodeList
的内容复制到一个新数组中(该数组独立于Xml文档)