Подтвердить что ты не робот

Располагаются ли ресурсы, даже если исключение выбрано в блоке использования?

Возможный дубликат:
Вызывается ли метод Dispose при вызове Exception внутри параметра Использование statment?

У меня есть количество блоков using при доступе к базе данных. Мне было интересно: если исключение должно было быть выбрано в блоке использования, будут ли все необходимые ресурсы оставлены, хотя конец блока не будет достигнут? Или мне нужно закрыть их вручную вручную в блоке catch?

4b9b3361

Ответ 1

Ресурсы, определенные с помощью оператора using, были расположены, это основная причина, по которой using подходит.

Оператор using гарантирует, что Dispose вызывается , даже если исключение возникает, когда вы вызываете методы на объекте. Ты можешь добиться того же результата, поставив объект внутри блока try и затем вызов Dispose в блоке finally; на самом деле, именно так using оператор переводится компилятором.
http://msdn.microsoft.com/en-us/library/yh598w02%28v=VS.100%29.aspx

Ответ 2

Да, ресурс используемого блока будет удален.

Ответ 3

Ты бы не стал. Фактически блок using тот же, если вы используете конструкцию try{}catch{}finally{} с вызовом метода Dispose в блоке finally. Так оно и будет называться.

Ответ 4

Да, элемент будет удален, так как вызов является частью блока finally try, в который преобразуется using.

Из 8.13 спецификации С#:

Оператор using используется в трех частях: получение, использование, и утилизации. Использование ресурса неявно заключено в попытке который включает предложение finally. Это окончательное предложение ресурса. Если нулевой ресурс получен, то нет вызова Dispose сделан, и исключение не выбрасывается.

Таким образом, вам не нужно будет утилизировать его вручную, и я не уверен, где ваш собственный блок catch будет в этом случае в любом случае.