Если вы столкнулись с некоторым кодом С#, подобным этому, с вложенными операциями/ресурсами:
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, должен ли он использовать поток ответов, который, в свою очередь, распределяет ответ? Думая об этом последнем предложении, я думаю, что вам действительно нужны отдельные операторы using, потому что нет способа гарантировать, что объект-оболочка будет удалять внутренний объект. Правильно ли это?