[英]Should I dispose XmlNodeList
在下面的代碼中,我從XmlDocument.SelectNodes()
獲取一個XmlNodeList
作為返回值
foreach (XmlNode node in doc.SelectNodes(xPath))
{
// Do stuff
}
事實證明, XmlNodeList
實現了IDisposable
。 這是否意味着每次我想迭代XmlDocument.SelectNodes()
的返回值時,我應該將它放在一個局部變量中並確保它被處理掉(即將它放在一個using
塊中)?
像這樣:
using(XmlNodeList nodes = doc.SelectNodes(xPath))
{
foreach (XmlNode node in nodes)
{
// Do stuff
}
}
System.Xml命名空間是,呃,不穩定。 最好的方式我可以把它。 XmlNodeList是一個抽象類,它繼承了IDisposable並實現了一次性模式,但本身並沒有做任何事情。
有三個內部類派生自XmlNodeList。 其中一個實際上覆蓋了Dispose(bool)方法XmlElementList。 該類具有XmlElementListener類型的私有字段。 還有另一個內部類,不是那么明顯它的作用,但它似乎“傾聽”列出變化。 Dispose方法(等待它)取消訂閱兩個事件處理程序。
這打破了本書中的所有規則,濫用IDisposable 永遠不正確。 不幸的是,你將不得不走路,幾乎不可能解開這個以查看該監聽器是否被實例化,以及如果你不調用Dispose(),這些事件處理程序是否會導致程序中持久的泄漏。 你最好叫它。
.NET Framework中有很多很棒的代碼。 好的代碼總是需要糟糕的代碼才能讓好的代碼顯而易見。 這是System.Xml的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.