我有以下創建一次性對象實例的方法。如何正確處理用LINQ創建的對象
Public Overridable Sub TransformXmlDocumentsToFileStream(ByVal stream As System.IO.Stream, ByVal xmlDocuments As IEnumerable(Of String), ByVal transformContext As XslTransformContext)
Dim readers As IEnumerable(Of XmlReader) = _
(From document In xmlDocuments _
Select XmlReader.Create(New System.IO.StringReader(document)))
With transformContext
TransformXmlDocumentsToFileStream(stream, readers, transformContext)
End With
End Sub
然後我遍歷對象在另一種方法中:
For Each reader In readers
Using reader
transform.Transform(reader, writer)
End Using
Next
在Visual Studio代碼分析器被給予警告:
CA2000:Microsoft.Reliability:在方法「TransformHelper .TransformXmlDocumentsToFileStream(Stream,IEnumerable(Of String),XslTransformContext)',對象'New StringReader(document)'不會沿着所有異常路徑放置。調用System.IDisposable.Dispose在對象'New StringReader(document)'之前,所有對它的引用超出範圍。
由於沒有對StringReader
沒有提到,我不能把它在使用塊或以其他方式處置它。可以忽略這個警告嗎? StringReader
應該在讀者超出範圍並被垃圾收集時處理,是否正確?
在這種特殊情況下我的VB權,讀者可以在使用塊內關閉,從而關閉底層流。 – 2011-02-24 20:07:05