Помогите с исключением handlin в блоке finally - PullRequest
1 голос
/ 17 мая 2011

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

Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 мая 2011

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

2 голосов
/ 17 мая 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 для Попробуйте ... Catch ... Наконец, заявления .

...