Обтекание Исключений - PullRequest
       4

Обтекание Исключений

4 голосов
/ 10 января 2010

Я часто хочу добавить полезную информацию в сообщение об исключении. Поскольку свойство Message класса Exception не имеет общедоступного установщика, один из вариантов заключается в переносе исключения, созданного в другом.

//...
catch(Exception e)
{
 throw new Exception("Some useful information.", e);
}

Это плохая практика, и если да, то какова альтернатива?

Ответы [ 5 ]

3 голосов
/ 10 января 2010

В этом нет ничего плохого, хотя я бы не стал использовать общий класс Exception, если у вас есть дополнительная информация. Проблемы с отладкой тем проще, чем конкретнее ваше исключение.

3 голосов
/ 10 января 2010

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

см. Эту информацию на InnerException

http://msdn.microsoft.com/en-us/library/system.exception.innerexception.aspx

Это стандартный подход, поэтому Microsoft встроила поддержку этого в свой класс исключений.

1 голос
/ 10 января 2010

Похоже, свойство Exception.Data - это то, что мне нужно.

0 голосов
/ 21 января 2010

Единственное предупреждение: вы не предоставили никакой новой информации для кода, который может быть в состоянии обработать исключение; вы только предоставили что-то полезное разработчику при отладке проблемы. Это может быть все, что вы после, но это кажется немного близоруким.

Я предпочитаю не создавать исключение точно такого же типа, особенно такого же общего, как Exception, потому что я мог бы иметь дело с ConnectionTimeoutException, но у меня нет способа обработать PlanetExplodedException. Я не знаю, как справиться с общим исключением, возможно, для его регистрации.

0 голосов
/ 10 января 2010

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

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