Подтвердить что ты не робот

XmlWriter: вызывает Close(), если используется используемый блок?

Достаточно ли создать XmlWriter с использованием блока (без вызова Close()) или лучше использовать блок try/finally и в заключение вызвать Close()?

4b9b3361

Ответ 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?