Возвращая объект 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
называется.