代码段如下
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());
}
}
据我所知,如果class包含IDisposable字段,那么它应该实现IDisposable本身并负责处理拥有的对象,因此在这个假设下,在处理streamWriter后,gZipOutputStream和memoryStream也将被处理掉。但是我们仍然不需要处理memoryStream来调用它上面的toArray()方法 所以问题是,最后在memoryStream上调用ToArray()方法是否安全?
答案 0 :(得分:6)
如果我正确理解了您的问题,那么您询问在ToArray()
处理完MemoryStream
后是否安全。
如果是的话,那么是的,这是安全的。 documentation指定:
此方法在
MemoryStream
关闭时有效。
编辑:如果不清楚closed
是否也意味着disposed
,您还可以查看Dispose
的{{3}}方法(注意:链接指向Stream.Dispose()
,因为MemoryStream
未覆盖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();
}
正如您所看到的,调用Dispose()
只会调用Close()
。