如何擺脫CA2202警告(CA2202:Microsoft.Usage:Object'compressedStream'可以在方法'Compression.InternalDecompress(byte [])'中多次拋棄。爲避免生成System.ObjectDisposedException你不應該調用從下面的代碼處置的對象上一次以上):擺脫CA2202
using (var compressedStream = new MemoryStream(inputData))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
我試圖擺脫的「使用」的聲明,並使用try /終於模式取代它,但後來我的獲取CA2000(CA2000:Microsoft.Reliability:在'Compression.InternalDecompress(byte [])'方法中,在對所有引用超出範圍之前調用System.IDisposable.Dispose對象的'stream')。我曾嘗試更換這樣上面的代碼:
MemoryStream decompressedData = null;
MemoryStream stream = null;
GZipStream decompressor = null;
try
{
decompressedData = new MemoryStream();
stream = new MemoryStream(inputData);
decompressor = new GZipStream(stream, CompressionMode.Decompress, false);
stream = null;
int bytesRead = 1;
int chunkSize = 4096;
byte[] chunk = new byte[chunkSize];
while ((bytesRead = decompressor.Read(chunk, 0, chunkSize)) > 0)
{
decompressedData.Write(chunk, 0, bytesRead);
}
decompressor = null;
return decompressedData.ToArray();
}
finally
{
if (stream != null)
{
stream.Dispose();
}
if (decompressor != null)
{
decompressor.Dispose();
}
if (decompressedData != null)
{
decompressedData.Dispose();
}
}
可能重複(http://stackoverflow.com/questions/3831676/ca2202-how-to-solve-this-case) – 2012-02-20 17:22:48