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

Если исключение происходит в операторе using, объект все равно удаляется?

Если исключение происходит в операторе using, объект все равно удаляется?

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

using (SPSite spSite = new SPSite(url))
{
       //Get the Web
       using (SPWeb spWeb = spSite.OpenWeb())
       {

           // Exception occurs here

       }
}
4b9b3361

Ответ 1

Да, они будут.

using(SPWeb spWeb = spSite.OpenWeb())
{
  // Some Code
}

эквивалентно

{
  SPWeb spWeb = spSite.OpenWeb();
  try
  {

    // Some Code
  }
  finally
  {
    if (spWeb != null)
    {
       spWeb.Dispose();
    }
  }
}

Изменить

После ответа на этот вопрос я написал более подробное сообщение о IDisposable and Using construct в моем блоге.

Ответ 2

Да. Оператор using преобразуется примерно в следующую конструкцию:

IDisposable x;
try
{
    ...
}
finally
{
    x.Dispose();
}

Ответ 3

Да, да. Это как обертывание вашего кода в попытке - наконец (и утилизации в конце).

Ответ 4

Оператор using создает полный и правильный шаблон dispose, поэтому ответ да.