同一个使用块中的多个变量

Dee*_*101 5 c# dispose idisposable using using-statement

我目前正在使用两个对象,如下所示:

using (var ms = new MemoryStream())
using (var bw = new BinaryWriter(ms))
{
    // work with ms and bw, both referenced here
}
Run Code Online (Sandbox Code Playgroud)

它工作"很好",实际上也是一个答案.但是,当我运行VS2012的代码分析工具时,我得到一个警告:

CA2202  Do not dispose objects multiple times   
Object 'ms' can be disposed more than once in method '<my method name>'. 
To avoid generating a System.ObjectDisposedException you should not 
call Dispose more than one time on an object.
Run Code Online (Sandbox Code Playgroud)

这让我相信可能有另一种方法来处理这种情况,但我不知道它是什么.

有谁知道在一个using块中以无警告方式使用两个对象的"正确"方法是什么?

Ser*_*rvy 2

BinaryWriter 类的编写方式是,当您处置 BinaryWriter 时,它将处置您传递给它的基础流,除非您使用可选的构造函数参数告诉它不要这样做。由于二进制编写器正在处理底层内存流,并且您也在块中处理它,因此using它被处理了两次。

现在,对于大多数类来说,这并不是真正的问题,因为它们应该(并且内存流)编写为如果处置两次就可以正常工作,只要您在处置后不使用它(您不是)这样您就可以安全地忽略该警告。如果您希望警告消失,您只需将内存流从使用中取出即可,因为它已经被处置了。