代码段如下
public static string ToCompressedBase64(this string text)
{
using (var memoryStream = new MemoryStream())
{
using (var gZipOutputStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
using (var streamWriter = new StreamWriter(gZipOutputStream))
{
streamWriter.Write(text);
}
}
return Convert.ToBase64String(memoryStream.ToArray());
}
}
据我所知,如果类包含IDisposable的字段,则它应该自己实现IDisposable并照顾拥有对象的处置,因此在这种假设下,在处置streamWriter之后,也将处置gZipOutputStream和memoryStream。但是我们仍然不需要配置memoryStream在它上面调用toArray()方法。
因此,问题是,在最后的memoryStream上调用ToArray()方法是否安全?
最佳答案
如果我正确理解了您的问题,则表示您正在处置ToArray()
后,是否可以安全地在MemoryStream
上调用MemoryStream
。
如果是这样,那么是安全的。 documentation指定:
当closed
关闭时,此方法有效。
编辑:并且,如果不清楚disposed
是否也表示Dispose
,您还可以在source code中查看Stream.Dispose()
方法(注意:链接是MemoryStream
,因为Dispose
并不覆盖Dispose()
方法):
public void Dispose()
{
/* These are correct, but we'd have to fix PipeStream & NetworkStream very carefully.
Contract.Ensures(CanRead == false);
Contract.Ensures(CanWrite == false);
Contract.Ensures(CanSeek == false);
*/
Close();
}
如您所见,调用
Close()
只是调用。关于c# - 多次使用块,此代码安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39145436/