Какие исключения я должен обработать? - PullRequest
2 голосов
/ 06 апреля 2011

Я разрабатываю приложение WinForms.

На данный момент все мои исключения регистрируются на уровне пользовательского интерфейса.

Однако ни для одного из них я не делаю ничего, кроме регистрации. Это свидетельствует о плохом дизайне?

Кроме того, в одном методе (метод .NET выполняет команду для службы Windows) он может генерировать исключения типа Win32Exception и InvalidOperationException.

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

Правильный ли это способ решить, какие исключения ловить? Кроме того, я должен поймать или бросить ArgumentNullException? Это указывает на проблему с кодом, верно?

1 Ответ

4 голосов
/ 08 апреля 2011

(я буду использовать Эрик Липперт таксономия исключений в ответе.)

Если вы ничего не можете с этим поделать, просто войдите и выйдите из текущей операции, экрана или всего приложения, в зависимости от серьезности ошибки. Только не пытайтесь действовать перед лицом фатальных исключений . В некоторых крайних случаях (например, AccessViolationException) простое ведение журнала или даже запуск ваших блоков finally не может быть хорошей идеей, поскольку вы не знаете, что произойдет, если вы запустите код в поврежденном процессе.

FileNotFoundException и другие экзогенные исключения с которыми вам следует обращаться в любом случае. Даже если вы можете проверить, существует ли файл заранее, ничто не мешает ему стать недоступным между проверкой и его использованием. Эти исключения зависят от внешних условий, которые вы не можете контролировать, поэтому вы должны быть готовы к их обработке.

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

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