Если исключение происходит в операторе using, объект все равно удаляется?
Если исключение происходит в операторе using, объект все равно удаляется?
Причина, по которой я спрашиваю, заключается в том, что я пытаюсь решить, следует ли попытаться поймать весь блок кода или внутри внутреннего оператора using. Принимая во внимание, что некоторые исключения пересматриваются дизайном в блоке catch.
using (SPSite spSite = new SPSite(url))
{
//Get the Web
using (SPWeb spWeb = spSite.OpenWeb())
{
// Exception occurs here
}
}
Ответы
Ответ 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
, поэтому ответ да.