Помощь с обработкой исключений в блоке finally

Я пытаюсь перехватить исключение с помощью блока try-catch-finally. Я поймал исключение в блоке catch и передал его в блок finally, используя глобальную переменную исключения. Таким образом, я обработал сценарий исключения в блоке finally. Я знаю, это звучит странно, но в этом есть необходимость. Пожалуйста, дайте мне знать, если есть какие-либо проблемы со стандартом кодирования с тем же самым. Кроме того, если вы можете предложить что-то по этому поводу, я буду очень признателен.

Спасибо.


person user756825    schedule 17.05.2011    source источник
comment
В чем необходимость? Вы могли просто избавиться от catch блога и получить finally блокировку.   -  person rkg    schedule 17.05.2011
comment
вы не передаете исключения в блоки finally.   -  person Mitch Wheat    schedule 17.05.2011
comment
Не могли бы вы прояснить проблему, которую пытаетесь решить? Несомненно, есть лучший способ решить эту проблему!   -  person Jakob Möllås    schedule 17.05.2011


Ответы (2)


catch - это перехватить исключение и выполнить любую необходимую обработку исключений. Блок finally предназначен для очистки любых оставшихся открытых ресурсов, таких как дескрипторы файлов, подключения к базе данных и т. Д. Этот блок будет большую часть времени работать и, следовательно, является правильным местом для очистки, но не обрабатывают сами исключения, с ними следует разбираться в блоке catch.

person Tony The Lion    schedule 17.05.2011
comment
Не всегда: stackoverflow.com/questions/1141502/ - person Rick Sladkey; 17.05.2011

Шаблон try-catch-finally - очень полезный и мощный шаблон, если он используется по назначению. Обработка исключений в блоке finally не рекомендуется и не имеет большого (какого-либо?) Смысла.
Попробуйте реорганизовать свой код в соответствии с шаблоном, а не наоборот.

Небольшой пример:

var reader = new StreamReader(path);
try
{
   // Do your work here
   reader.ReadToEnd();
}
catch (IOException ex)
{
    // Handle specific error here
    ShowUserError(ex.Message);
}
catch (Exception ex)
{
    // Handle general error here
    LogError(ex);
}
finally
{
   // Perform clean up here
   // This code will run regardless if there was an error or not
   reader.Close();
}

Также ознакомьтесь с документацией MSDN для Попробуйте ... Лови ... Наконец-то заявления.

person Jakob Möllås    schedule 17.05.2011