Достаточно ли создать XmlWriter с использованием блока (без вызова Close()) или лучше использовать блок try/finally и в заключение вызвать Close()?
XmlWriter: вызывает Close(), если используется используемый блок?
Ответ 1
Используемый блок является ярлыком для блока try/finally с вызовом Dispose() для любого объекта, который реализует IDisposable.
В случае потоков и потоковых писателей Dispose() обычно вызывает Close() вручную. Используя рефлектор, здесь метод Dispose для XmlWriter:
protected virtual void Dispose(bool disposing)
{
if (this.WriteState != WriteState.Closed)
{
try
{
this.Close();
}
catch
{
}
}
}
Итак, короткий ответ - да, блок using
будет обрабатывать закрытие XmlWriter для вас.
Ответ 2
Нет, вызов его отдельно не требуется. Это то, для чего используется блок использования.
Когда выполнение выходит из блока использования, XmlWriter располагается, а внутри XmlWriter.Dispose
вызывает XmlWriter.Close
.
Ответ 3
Но... Отражатель на экране XmltTextWriter.Close():
если (this.closeOutput) { this.stream.Close(); } this.Stream = null;
флаг closeOutput установлен в значение settings.CloseOutput, которое может быть ложным.
Вы уверены, что обработчик свободен при использовании выражения "using" в XmlTextWriter?