Что-то вроде:
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
Я считаю, что это не подходящее место для ответного заявления, не так ли?
Что-то вроде:
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
Я считаю, что это не подходящее место для ответного заявления, не так ли?
Как отметили несколько других в целом, это не проблема.
Единственный случай, когда это вызовет у вас проблемы, - это если вы вернетесь в середине оператора using и дополнительно вернете переменную using. Но опять же, это также может вызвать проблемы, даже если вы не вернетесь и просто сохраните ссылку на переменную.
using ( var x = new Something() ) {
// not a good idea
return x;
}
Так же плохо
Something y;
using ( var x = new Something() ) {
y = x;
}
return
оператор делает конецusing
блока недоступным для любых путей кода. Конецusing
блока должен быть пройден, чтобы при необходимости объект можно было утилизировать.Это прекрасно.
Вы, очевидно, думаете, что
слепо переводится на:
Что, по общему признанию, было бы проблемой, и сделало бы
using
заявление довольно бессмысленным - вот почему это не то, что он делает.Компилятор обеспечивает удаление объекта до того, как элемент управления покидает блок - независимо от того, как он покидает блок.
источник
Это абсолютно нормально - никаких проблем. Почему вы считаете, что это неправильно?
Оператор using - это всего лишь синтаксический сахар для блока try / finally, и, как говорит Грженио, можно также вернуться из блока try.
Возвращаемое выражение будет оценено, затем будет выполнен блок finally, затем метод вернется.
источник
Это будет прекрасно работать, так же как возвращение в середине
try{}finally{}
источник
Это полностью приемлемо. Используя оператор обеспечивает IDisposable объект будет расположен ни на что.
Из MSDN :
источник
Код ниже показывает, как
using
работает:Вывод:
Распоряжение вызывается после оператора return, но перед выходом из функции.
источник
Возможно, это не на 100% правда, что это приемлемо ...
Если вам случится вложить и вернуться из вложенного, это может быть небезопасно.
Возьмите это как пример:
Я передавал DataTable для вывода в виде CSV. С возвратом в середине он записывал все строки в поток, но в выводимом csv всегда отсутствовала строка (или несколько, в зависимости от размера буфера). Это сказало мне, что что-то не было закрыто должным образом.
Правильный способ - убедиться, что все предыдущие использования расположены правильно:
источник