Exit Try/Catch для предотвращения выполнения кода после запуска

У меня есть пример try/catch в моем методе:

    }
    catch (OurCustomExceptionObject1 ex)
    {
       txtErrorMessage.InnerHtml = "test 1";
    }
    catch(OurCustomExceptionObject2 ex)
    {
        txtErrorMessage.InnerHtml = "test 2";
    }
    catch (OurCustomExceptionObject3 ex)
    {
        txtErrorMessage.InnerHtml = "test 3";
    }

    ... rest of code here is being executed after the try/catch

Я не хочу, чтобы остальная часть кода запускалась, если было обнаружено какое-либо из исключений. Я обрабатываю исключения. Я слышал, почему-то не использовать Exit Try. Это правда, это плохо сделать? Это правильный способ остановить выполнение кода после этого выписки?

Ответ 1

Либо return в catch-блоке, повторите исключение или переместите код ниже блока try внутри блока try.

Ответ 2

Приходят сразу два варианта:

  • return прямо изнутри каждого catch (как предположил BlueRaja)
  • установите флажок (например, errorOccurred) в блоках catch для исключений, которые вы не хотите разрешать, затем поместите if (errorOccurred) return; после всего блока try/catch

Последнее может быть более читаемым для других разработчиков, так как легко пропустить прошлое, что происходит внутри catch, чтобы выяснить, что произойдет потом. Видя вопиющее if (errorOccurred) return;, трудно понять, что произошло.

Ответ 3

С точки зрения высокого уровня, я думаю, что это может быть нарушением (по крайней мере) принципа единой ответственности, если ваш код пытается сделать что-то, что может потерпеть неудачу, а затем продолжить делать еще кое-что.

Ради ответа, хотя, если вы хотели сделать взломать (что всегда плохо, так и нет), вы могли бы сделать

bool success = true;
try
{
    // the good ol' college try
}
catch (...)
{
    success = false;
}

if (success)
{
    // do the rest of your stuff
}

изменить: или, альтернативно, как предложил BlueRaja, поместите весь свой код в блок try. Если первый бит терпит неудачу, он терпит неудачу. Остальная часть кода не будет работать в любом случае.