Документация по этому предупреждению анализа (http://msdn.microsoft.com/en-us/library/ms182334.aspx) дает этот пример, аналогичный вашему в том, что он управляет потоками:
Stream stream = null;
try
{
stream = new FileStream("file.txt", FileMode.OpenOrCreate);
using (StreamWriter writer = new StreamWriter(stream))
{
stream = null;
// Use the writer object...
}
}
finally
{
if(stream != null)
stream.Dispose();
}
но это все равно дает ошибку. Следующее исправит ошибку:
Stream stream = null;
StreamWriter writer = null;
try
{
stream = new FileStream("file.txt", FileMode.OpenOrCreate);
writer = new StreamWriter(stream))
// Do some stuff on the stream writer..
}
finally
{
if(writer != null)
writer.Dispose();
else if(stream != null)
stream.Dispose();
}
Причина проста; если писатель всегда будет распоряжаться потоком для вас. Только в сценарии средство записи не будет успешно создано, если вы удалите поток самостоятельно. Но я должен признать, что мне больше нравится следующий синтаксис, и если вы создаете MemoryStream вместо FileStream, вероятность возникновения исключения невелика, и я бы предпочел подавить CA. Обратите внимание, что вы можете сложить с помощью операторов, поэтому дополнительный «уровень вложенности» часто не требуется.
using (Stream stream = new FileStream("file.txt", FileMode.OpenOrCreate))
using (StreamWriter writer = new StreamWriter(stream))
{
// Use the writer object...
}