Обычно я делал что-то как этот (просто пример):
using (Stream xmlStream = client.OpenRead(xmlUrl))
{
using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
{
}
}
Не лучше, чтобы сделать просто:
using (XmlTextReader xmlReader = new XmlTextReader(client.OpenRead(xmlUrl)))
{
}
Но я не уверен, будут ли в этом коротком синтаксисе все ресурсы расположены (Поток) или только XmlTextReader?
Заранее спасибо за Ваш ответ.
Нет; это не гарантирует, что поток Stream
будет удален, если конструктор XmlTextReader
вызовет исключение. Но вы можете сделать:
using (Stream xmlStream = client.OpenRead(xmlUrl))
using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
{
// use xmlReader
}
Что насчет (я использую это сейчас):
using (Stream xmlStream = client.OpenRead(xmlUrl))
using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
{
...
}
Второе использование - это ссылка на использование from первое - скобки не нужны.
В справочной документации указано, что удаляемый объект должен быть объявлен в операторе using. Поскольку для потока нет объявления, метод Dispose не будет вызываться.
В вашем случае вы можете полностью пропустить поток и использовать конструктор TextReader, который принимает параметр url. Базовый поток будет закрыт при удалении средства чтения.
using (var xmlReader = new XmlTextReader( xmlUrl ))
{
...
}