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

时间:2019-06-11 05:37:39

标签: c# stream using memorystream

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

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))
{

}

1 个答案:

答案 0 :(得分:2)

创建ZlibStream并传递MemoryStream时,它会保留对它的引用。

当其Disposed时,它在该引用上调用Close,这反过来又会打抽象 Dispose类的Stream管道。

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

值得注意的是,MemoryStream无论如何都没有不受管理的资源,并且实际上不需要处置,也不必覆盖 Close类中的Stream

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