.NET - Замена вложенных операторов использования с единственным оператором использования

Если Вы столкнулись с некоторым кодом C# как это с вложенными операторами/ресурсами использования:

using (var response = (HttpWebResponse)request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        using (var reader = new BinaryReader(responseStream))
        {
            // do something with reader
        }
    }
}

Действительно ли безопасно заменить его чем-то вроде этого?

using (var reader = new BinaryReader(((HttpWebResponse)request.GetResponse()).GetResponseStream()))
{
    // do something with reader
}

Примером выше является просто пример вложенных доступных ресурсов, поэтому простите мне, если это не точно корректное использование. Мне любопытно если, когда Вы располагаете наиболее удаленный ресурс (BinaryReader в этом случае), если он рекурсивно расположит своих детей для Вас, или если необходимо явно расположить каждый "слой" с отдельными операторами использования? Например, если Вы располагаете BinaryReader, он, как предполагается, располагает ответный поток, который в свою очередь располагает ответ? Размышление о том последнем предложении заставляет меня думать, что Вам на самом деле нужны отдельные операторы использования, потому что нет никакого способа гарантировать, что интерфейсный объект избавился бы от внутреннего объекта. Это правильно?

6
задан Andy White 19 October 2010 в 23:15
поделиться