如何确保以下代码以更好的方式处理所有对象?目前,代码分析告诉我
错误 45 CA2202:Microsoft.Usage:可以在方法“CPCommunicator.GetResults(string)”中多次释放对象“ns”。为避免生成 System.ObjectDisposedException,您不应在一个对象上多次调用 Dispose。:行:64、65
NetworkStream ns = null;
StreamWriter requestStream = null;
TextReader responseStream = null;
var results = new StringBuilder();
try
{
ns = new NetworkStream(CreateConnection(), true);
requestStream = new StreamWriter(ns);
requestStream.Flush();
responseStream = new StreamReader(ns);
requestStream.Write(reportData);
requestStream.Flush();
while (responseStream.Peek() != -1)
{
var currentLine = responseStream.ReadLine();
results.Append(currentLine);
results.Append("\n");
}
}
finally
{
if (requestStream != null) requestStream.Close();
if (responseStream != null) responseStream.Close();
if (cpNetworkStream != null) cpNetworkStream.Close();
}
由于requestStream和responseStream都使用了ns,它们都对ns进行了处理,所以为了满足代码分析警告,我不得不注释掉finally block 中的最后两个close方法。但我真的要这样做吗?????
最佳答案
是的,恕我直言,你真的应该只调用一次。
或者,您可以在 ns 上使用 using 语法,这会使整个情况更加清晰。
using (ns = new NetworkStream(CreateConnection(), true)) {
...
}
关于c# - 处置对象多次错误。 CA2202。有没有更好的办法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2803314/