使用语句仍会导致2个一次性对象的代码分析问题

时间:2013-04-29 16:27:09

标签: .net vb.net

 Using ms As New MemoryStream
    Dim st As New GZipStream(ms, CompressionMode.Compress, True)

    '... some code

    Return buffer
 End Using

而且:

dim As New MemoryStream
 using st As New GZipStream(ms, CompressionMode.Compress, True)

    '... some code

    Return buffer
 End Using

我有一些遗留代码在流对象上手动调用Dispose()和Close() - 这导致CA2202代码分析警告可能多次调用Dispose()。所以我为内存流和gzipstream添加了使用语句,错误没有消失!?

如果我在memorystream或gzipstream对象上使用它,那么错误就会消失。是造成这种行为吗?

1 个答案:

答案 0 :(得分:0)

原因可能是,因为GZipStream在调用自己的Dispose方法时正在处理基础流。因此,我建议仅保留Using的{​​{1}}语句。至少,这是.NET框架中大多数内置流包装器的行为。例如,GZipStream将在调用BufferedStream / Close()时关闭基础流对象(根据MSDN文档,行为在代码示例中的注释中解释)< / p>