Как уже упоминалось другими, эта проблема вызвана тем, что вы вызываете Close()
внутри using
блока, и этот вызов должен быть удален.Я предлагаю вам разобраться и понять, почему эти вызовы эквивалентны.
Посмотрите на исходный код StreamWriter.Close()
:
public override void Close() {
Dispose(true);
GC.SuppressFinalize(this);
}
И метод IDisposable.Dispose()
, который TextWriter
(основа для StreamWriter
) реализует как показано ниже.Этот Dispose()
вызывается во время выполнения, когда выполняется закрывающая фигурная скобка блока using
.
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
Компилятор переводит блок using
в try/finally
, поэтому ваш код эквивалентен:
StreamWriter tw = File.AppendText(fileName)
try {
tw.WriteLine(line2Write);
tw.Close();
}
finally {
tw.Dispose();
}
Таким образом, вы делаете одно и то же дважды, и таким образом получаете это предупреждение.
FYI - исходный код .NET Framework здесь