Есть ли способ продолжить исключение в C #? - PullRequest
4 голосов
/ 16 декабря 2009

Когда в вашей программе возникает непредвиденное исключение (в отладчике). Иногда вы просто хотите пропустить это, поскольку уничтожение программы в этот момент более вредно, чем продолжение. Или вы просто хотите продолжить, так как вас больше интересует другая ошибка / ошибка

Есть ли опция / compilerflag / secretswitch, чтобы включить это?

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

Ответы [ 8 ]

6 голосов
/ 16 декабря 2009

Вы не можете сделать это без соответствующего блока catch в вашем коде, нет. Тем не менее, я не помню, чтобы когда-либо хотел сделать это: если возникает исключение, которое ваш код не знает, как на самом деле обрабатывать, почему вы хотите продолжить? Вы находитесь в плохом состоянии в этот момент - продолжать было бы опасно.

Можете ли вы привести пример, почему вы хотите продолжить сеанс отладчика, а не рабочий код?

3 голосов
/ 07 марта 2012

Исключения в C # не являются возобновляемыми, но события - и именно так обычно реализуются возобновляемые исключения: как отменяемые события . Смотри также этот вопрос .

2 голосов
/ 16 декабря 2009

Используйте блок try-catch, а при перехвате ничего не делайте с исключением.

1 голос
/ 16 декабря 2009

При пошаговом выполнении кода в режиме отладки вы можете пропустить выполнение инструкций, которые выдают нежелательное исключение. Но если исключение уже сгенерировано и у вас нет попытки / поймать, оно будет распространяться.

1 голос
/ 16 декабря 2009

Если вы находитесь в отладчике, щелкните правой кнопкой мыши на строке, которую вы хотите продолжить, и выберите: Установить следующее утверждение ... но используйте его на свой страх и риск!

0 голосов
/ 16 декабря 2009

Я предполагаю, что под "пропуском" вы подразумеваете, что хотите, чтобы ваша программа продолжала работать после исключения. Это, конечно, возможно, перехватывая исключение при использовании блока try-catch.

Если исключение не является остановкой приложения (например, некоторая ключевая переменная не инициализируется после исключения и вы не можете продолжить работу), рекомендуется хотя бы зарегистрировать ее перед продолжением. Конечно, ставить

поймать (исключение е) {}

везде в вашем источнике не приведет к стабильному приложению;)

Если ваша проблема больше связана с отладчиком (вы не хотите, чтобы отладчик останавливался при каждом выдаваемом исключении), то в VS есть место, где вы можете изменить это:

В меню Отладка выберите Исключения . Вы увидите все возможные исключения и сможете настроить их поведение, когда пользователь их выбрасывает или не обрабатывает.

0 голосов
/ 16 декабря 2009

Если вы хотите знать, какое исключение вы хотите разрешить. тогда вы можете сделать это ниже

try
{
       // your functionality
}
catch(Exception ex)
{
     // Catch only the exceptions you need to point out
}
finally
{
   //do what you want to complete with this function.
}
0 голосов
/ 16 декабря 2009

Ознакомьтесь с Блоком приложения обработки исключений и соответствующей документацией. Он содержит лучшие практики для обработки исключений приложений, и для вас сделано много кода инфраструктуры, т. Е. Ведение журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...