2013-08-28 4 views
0

Я занимаюсь обработкой исключений в течение некоторого времени и установил Resharper и теперь получаю всевозможные сообщения, которые я должен и должен делать. Во всяком случае, он говорит, что я не должен использовать try и catch блоки вокруг моего кода. Итак, где я могу их перехватить? Я видел людей, которые ищут определенные исключения, такие как «Файл не найден», но как насчет всех других ошибок или исключений, которые уникальны?Обработка исключений - Каков правильный способ сделать это?

Вот пример некоторой обработки его исключения стонет о:

try 
{ 
    var rnd = new Random(); 
    var buffer = new byte[sizeof(UInt64)]; 
    rnd.NextBytes(buffer); 
} 
catch (Exception) 
{ 
    throw; 
} 

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

+8

Вы вставляете их, чтобы поймать исключения, о которых вы можете что-то сделать. Здесь вы ничего не делаете. вы просто ловите его, ничего не делаете с ним и бросаете его снова. Исключение составляет * уже * будет проблемой вызывающего, если вы ничего не сделаете; вам не нужно писать код, который делает то, что будет выполняться автоматически. –

+3

Также прочитайте это, прежде чем писать код обработки исключений: http://ericlippert.com/2008/09/10/vexing-exceptions/ –

+1

И этот вопрос, хотя и плохо подходит для SO, имеет много хороших предложений : http://stackoverflow.com/questions/2883936/common-programming-mistakes-in-net-when-handling-exceptions/2884340#2884340 –

ответ

0

Захватите только те исключения, которые вы можете обрабатывать, например, вставку дублирующего первичного ключа. Чтобы вы могли показать пользователю сообщение для ввода разных значений.

Для других исключений пусть они пузырятся в вашей библиотеке и обрабатывают их в одном месте. Подобно событию Application_Error в ASP.Net

0

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

См объяснение, которое было дано мне, когда я задал совершенно аналогичный вопрос: when to use try/catch

Если вы хотите только диагностировать/журнал исключение и не что-либо конкретное об этом не делать, вы можете использовать глобальное исключение обработчик, то есть AppDomain.UnhandledException - таким образом вы можете централизовать обработку.

Смежные вопросы