【发布时间】:2011-02-23 18:37:19
【问题描述】:
我有以下创建一次性对象实例的方法。
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)”并未沿所有异常路径进行处理。在对对象“New StringReader(document)”的所有引用超出范围之前调用 System.IDisposable.Dispose。
由于没有对StringReader 的引用,我不能将它放在 using 块中或以其他方式处理它。可以忽略此警告吗? StringReader 应该在阅读器超出范围并被垃圾收集时释放,对吗?
【问题讨论】:
-
在这种特定情况下,阅读器可以在 using 块内关闭,从而关闭底层流。
标签: .net linq dispose idisposable