В общем, вы не должны улавливать любые исключений.
Я знаю, это звучит странно, но факт в том, что вы должны только ломать исключения, вы можете на самом деле сделать что-то о, и вы обычно ничего не можете сделать об исключениях.
«Исключения» этого правила имеют отношение к тому, что означает «обрабатывать» исключение. В некоторых приложениях «обработка» исключения означает его регистрацию. В других (например, ASP.NET) лучше не обрабатывать исключение, потому что в этом случае система (мониторинг работоспособности ASP.NET в этом случае) будет регистрировать ее для вас.
В управляемом событиями коде, таком как Windows Forms, я считаю, что в обработчиках событий необходимо исключать исключения. По крайней мере, в более ранних версиях .NET, позволяющих исключать распространение за пределами, например, событие нажатия кнопки вызывало неприятные результаты. Обычно я получаю исключение и отображаю его в диалоговом окне.
В приложении многоуровневого, можно перехватывать исключения на границах уровня, а затем повторно выдать новое, уровневый конкретное исключение:
try
{
// ...
}
catch (Exception ex)
{
throw new TierException("Some message", ex);
}
Другого случай использования поймать исключение, а затем бросить новое исключение с дополнительной информацией в нем:
public int GetValueFromConfigurationFile(...)
{
const string configFileName = "...";
try
{
// ...
}
catch (FileNotFoundException fEx)
{
throw new InvalidOperationException(
String.Format("Can't find configuration file {0}", configFileName),
fEx);
}
}
в этом случае, вы улавливаете конкретное исключение (FileNotFoundException
), а также предоставление вашей информации о вызывающем абоненте, они не могли бы знать: что файл не найден был файлом конфигурация.
Общее сообщение: - только перехватывать исключения вы знаете, как обращаться с - Поймать наиболее конкретное исключение из возможных - Всегда включать внутреннее исключение при создании нового исключения, чтобы сохранить цепочку исключений - Для того, чтобы повторно выдать текущее исключение, используйте throw;
, а не throw ex;
Есть еще несколько, и я попытаюсь найти вам ссылку из Руководства по разработке Microsoft Framework.
P.S. Если кто-то может найти вопрос, это дубликат, не стесняйтесь закрывать его как дубликат. Я не против потерять репутацию от этого. Я просто не мог найти дубликат.
Я должен был просто разместил ссылку на «обработка исключений» tag wiki, где он говорит:
Однако, для обработки исключений в контексте .NET программ, см "Design Guidelines for Exceptions ».
Вы можете найти ответ и ссылки в нем: http://stackoverflow.com/a/7152374/625332 – Dmitry