Правильн ли следующий метод обработки исключений?
Нет.Есть несколько вопросов.Вот два самых важных из них.
1.Вы не должны ловить исключения, которые вы не можете обработать
Довольно важно.Все блоки исключений, которые просто перебрасывают или регистрируют исключения, загромождают код без добавления какого-либо значения.Перехватывайте все исключения только в верхнем слое (в веб-службе, контроллере MVC, в фоновом потоке и т. Д.), Чтобы предотвратить сбой приложения.(однако иногда лучше разрешить сбой приложения).
Исключение было обработано, если метод может вернуть ожидаемое значение.
2.Всегда включайте исходное исключение
Вы скрываете информацию, которая важна для предотвращения ее использования в будущем, когда вы копируете только частичную информацию из исходного исключения.
Если выдолжен поймать / выбросить другого, вы должны сделать это так:
public class CustomException : Exception
{
public CustomException(string msg, Exception inner) : base(msg, inner){}
}
// и в методе:
public void DoSomething()
{
try
{
SomeCoolOp();
}
catch (Exception err)
{
throw new CustomException("Tried to allocate some cool stuff", err);
}
}
Изменения по сравнению с вашим кодом:
- Мы включили исходное исключение в способ, которым Microsoft рекомендует
- Мы пишем
operation specific
сообщение, то есть описывает, что мы пытались сделать, когда произошло исключение (вместо использования исходного сообщения)
Дополнительная информация
Я написал несколько постов в блоге об обработке исключений.
Вы можете начать с чтения: http://blog.gauffin.org/2010/11/do-not-catch-that-exception/
А потом прочитайте остальные: http://blog.gauffin.org/tag/exceptions/