如何确保以下代码以更好的方式处理所有对象?目前,代码分析告诉我
错误 45 CA2202:Microsoft.Usage:对象“ns”可以在方法“CPCommunicator.GetResults(string)”中多次处置。为了避免生成 System.ObjectDisposeException,您不应在一个对象上多次调用 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块中的最后两个close方法。但我真的想这样做吗????
是的,恕我直言,你真的应该只调用一次。
或者,您可以在 ns 上使用 using 语法,这使得整个情况更加清晰。
using (ns = new NetworkStream(CreateConnection(), true)) {
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)