Можно ли (неправильно) использовать Exception.HelpLink для распознавания объектов исключения? - PullRequest
5 голосов
/ 11 июня 2011

Я работаю над программой регистрации, и я хотел бы избежать повторной обработки одного и того же объекта Exception, когда он регистрируется повторно, поскольку он просачивается через вложенную структуру вызова.Поэтому я хотел бы иметь возможность отформатировать объект Exception один раз и дать отформатированной версии уникальный «номер исключения», а затем каким-либо образом пометить объект Exception, чтобы я мог распознать его, если он снова появится в более поздней версии.log call.

Идея, которую я придумала, заключается в неправильном использовании поля HelpLink объекта Exception.Я установлю в нем строковую версию моего «номера исключения».Тогда я смогу распознать объект Exception, если он снова появится на мгновение в другом вызове журнала.

Но разве это плохая идея?Есть ли какие-то ошибки, о которых я не подумал?Если да, у кого-нибудь есть идея получше?

РЕДАКТИРОВАТЬ: Чтобы объяснить ситуацию немного подробнее, этот регистратор будет использоваться только в моих собственных программах.

Ответы [ 5 ]

8 голосов
/ 11 июня 2011

Вместо свойства «злоупотребление» HelpLink вы можете использовать свойство Data для добавления дополнительной информации к Exception.Он содержит пары ключ / значение, которые предоставляют дополнительную пользовательскую информацию об исключении.

4 голосов
/ 11 июня 2011

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

2 голосов
/ 11 июня 2011

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

Более того, вы можете изучить варианты использования log4net для ведения журнала и пользовательского интерфейса отчетов для форматирования / группировки исключений из файлов журнала или таблиц базы данных, созданных / обновленных log4.net

0 голосов
/ 13 июня 2011

Ваш код не должен перехватывать и регистрировать исключение на каждом уровне.Нет причины, по которой ваш код должен видеть одно и то же исключение дважды.Это звучит очень похоже на то, что вы используете «ловить все исключения», что является основным анти-паттерном.

0 голосов
/ 11 июня 2011

Нет, использование HelpLink недопустимо. Как упомянул @Greebo, если вам нужны дополнительные свойства, вы можете создать свои собственные классы исключений. Альтернативой может быть использование свойства Data, которое является частью класса System.Exception.

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

Если нет, то, скорее всего, вам не нужны обработчики. Просто позвольте исключению (используя блок finally для очистки) скопировать стек вызовов и обработать его на самом верхнем уровне. Если ваши обработчики обрабатывают исключение, я не уверен, почему у вас будет такое же исключение дальше по стеку. Я думаю, что более вероятно, что вы создадите новое исключение, установив внутреннее исключение для того, которое было обработано.

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