Возвращая объект XmlTextReader, могу ли я вызвать.Close()

Я сейчас в безвыходном положении, пытаясь найти источник проблемы. Наша обработка исключений отсутствует, так что я немного догадываюсь, откуда возникла ошибка. Вот мой вопрос: если метод возвращает объект XmlTextReader, становится ли этот объект пустым, если он обернут в try/catch/finally, где блок finally использует метод.Close()?

Если да, как я могу правильно распоряжаться этими ресурсами, я знаю, что нет метода.Clone() или.Copy(), есть ли другой способ сделать это? Должен ли я вообще заботиться об удалении объектов XmlTextReader и XmlReader?

Спасибо

1 ответ

Решение

Вы не должны закрывать / утилизировать XmlReader перед возвратом звонящему.

И нет, Dispose/Close не назначать null к объекту - они просто просят объект освободить любые ресурсы, которые, по его мнению, должны быть освобождены.

XmlReader GetReader()
{
   XmlRead reader = ....

   // DO NOT dispose/close reader here with 
   // reader.Dispose() or using(reader){...}

   return reader;
}

Использование:

using(var reader = GetReader()) {...}

Обратите внимание, что многие типы защищают от доступа к данным после Dispose называется. Подход, используемый многими классами в.Net, заключается в сбое всех вызовов для доступа к состоянию объекта с помощью ObjectDisposedException после Dispose называется.

Другие вопросы по тегам