簡體   English   中英

我應該處理XmlNodeList

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM