C# Используя ключевое слово - вложенный в одной строке

Обычно я делал что-то как этот (просто пример):

using (Stream xmlStream = client.OpenRead(xmlUrl))
{
    using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
    {
    }
}

Не лучше, чтобы сделать просто:

using (XmlTextReader xmlReader = new XmlTextReader(client.OpenRead(xmlUrl)))
{
}

Но я не уверен, будут ли в этом коротком синтаксисе все ресурсы расположены (Поток) или только XmlTextReader?

Заранее спасибо за Ваш ответ.

8
задан John Sibly 9 March 2010 в 12:28
поделиться

3 ответа

Нет; это не гарантирует, что поток Stream будет удален, если конструктор XmlTextReader вызовет исключение. Но вы можете сделать:

using (Stream xmlStream = client.OpenRead(xmlUrl))
using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
{
    // use xmlReader 
}
21
ответ дан 5 December 2019 в 06:37
поделиться

Что насчет (я использую это сейчас):

using (Stream xmlStream = client.OpenRead(xmlUrl))
using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
{
...
}

Второе использование - это ссылка на использование from первое - скобки не нужны.

2
ответ дан 5 December 2019 в 06:37
поделиться

В справочной документации указано, что удаляемый объект должен быть объявлен в операторе using. Поскольку для потока нет объявления, метод Dispose не будет вызываться.

В вашем случае вы можете полностью пропустить поток и использовать конструктор TextReader, который принимает параметр url. Базовый поток будет закрыт при удалении средства чтения.

using (var xmlReader = new XmlTextReader( xmlUrl ))
{
   ...
}
2
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: