Как я могу убедиться, что следующий код лучше удаляет все объекты? В настоящее время анализ кода говорит мне
Ошибка 45 CA2202: Microsoft.Usage: объект «ns» может быть удален более одного раза в методе «CPCommunicator.GetResults (строка)». Чтобы избежать генерации 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, поэтому, чтобы удовлетворить предупреждение анализа кода, я должен закомментировать два последних метода close в блоке finally. Но действительно ли я хочу этого?????
Dispose
указано, что если методDispose
объекта вызывается более одного раза, объект должен игнорировать все вызовы после первого. Объект не должен вызывать исключение, если его методDispose
вызывается несколько раз. msdn.microsoft.com/en-us/library/ а> - person LukeH   schedule 10.05.2010IDisposable
требует, чтобыDispose
был идемпотентным. - person cHao   schedule 31.10.2012