gpt4 book ai didi

c# - 我应该处理 XmlNodeList

转载 作者:行者123 更新时间:2023-11-30 14:31:54 26 4
gpt4 key购买 nike

在下面的代码中,我从 XmlDocument.SelectNodes()

获取了一个 XmlNodeList 作为返回值
foreach (XmlNode node in doc.SelectNodes(xPath))
{
// Do stuff
}

事实证明,XmlNodeList 实现了 IDisposable。这是否意味着每次我想迭代 XmlDocument.SelectNodes() 的返回值时,我应该把它放在一个局部变量中并确保它被处置(即将它放在一个 using block )?

像这样:

using(XmlNodeList nodes = doc.SelectNodes(xPath))
{
foreach (XmlNode node in nodes)
{
// Do stuff
}
}

最佳答案

System.Xml 命名空间是,呃,不稳定。我能说的最好的方式。 XmlNodeList 是一个抽象类,它继承了 IDisposable 并实现了一次性模式,但本身不做任何其他事情。

从 XmlNodeList 派生了三个内部类。其中之一实际上覆盖了 Dispose(bool) 方法 XmlElementList。该类有一个 XmlElementListener 类型的私有(private)字段。另一个内部类,它的作用并不明显,但它似乎“监听”列表更改。 Dispose 方法(等待它)取消订阅两个事件处理程序。

这违反了书中的所有规则,为此滥用 IDisposable 是永远不正确的。不幸的是,您将不得不走这条路,如果您不调用 Dispose(),几乎不可能弄清楚该监听器是否曾经被实例化,以及这些事件处理程序是否会在您的程序中造成长期的泄漏。你最好叫它。

.NET Framework 中有很多很棒的代码。好的代码总是需要坏的代码来使好代码的好坏一目了然。这是 System.Xml 的工作。

关于c# - 我应该处理 XmlNodeList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19304826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com