C# 嵌套流与 using 语句,我应该使用两个 using 吗?

C# nested stream with using statement, should I use two using?

我正在编写一段使用嵌套流的代码:

using (var zip = new ZlibStream(new MemoryStream(to_be_unziped), CompressionMode.Decompress))
{

}

还好吗?或者我应该写成:

using (var memory_stream = new MemoryStream(to_be_unziped))
using (var zip = new ZlibStream(memory_stream, CompressionMode.Decompress))
{

}

当您创建 ZlibStream 并传入 MemoryStream 时,它会保存对它的引用。

当它是 Disposed 时,它会在该引用上调用 Close,这反过来会影响 abstractDispose 管道 Stream class.

protected override void Dispose(bool disposing)
{
    try
    {
        if (!_disposed)
        {
            if (disposing && (this._baseStream != null))
                this._baseStream.Close();
            _disposed = true;
        }
     }
     finally
     {
        base.Dispose(disposing);
     }
}

值得注意的是,MemoryStream无论如何都没有非托管资源,实际上不需要Disposed,它不需要override CloseStream class.

Stream 还会检查 Dispose 是否已被调用。这意味着在大多数情况下,您只需要 Dispose 您正在使用的