C # перегрузка попробовать / поймать - PullRequest
2 голосов
/ 25 октября 2011

Возможно ли перегрузить операторы try / catch в C #? В противном случае, возможно ли наследовать и создавать аналогичные функции?

Мы добавляем ELMAH к существующему веб-приложению, и код широко использует try / catch, отображая ошибки в сводке проверки вместо отображения страниц ошибок. Поскольку ошибки обнаруживаются в операторе catch, ELMAH предполагает, что ошибки устраняются; в действительности они просто отображаются более презентабельно.

Вот пример того, что он делает:

try
{
    //code here...
}
catch (Exception ex)
{
    customValidatorError.IsValid = false;
    customValidatorError.ErrorMessage = ex.Message;
}

В идеале перегрузка просто скажет Elmah добавить исключение в журналы через ErrorSignal.FromCurrentContext().Raise(e);

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

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Как вы обнаружили, упаковка всего в try / catch обычно оказывается не тем, что вы действительно хотите. Вы в конечном итоге «проглатываете» исключения, которые вы, вероятно, хотите где-то регистрировать. Если вы хотите отобразить сообщение об исключении на странице с помощью специального валидатора, вам, вероятно, следует повторно выдать исключение, чтобы можно было его всплыть. ASP.NET позволит вам настроить «глобальную» обработку ошибок. Если вы хотите проглотить исключения, вы можете сделать это в одном месте. Если вы хотите подать сигнал ELMAH или зарегистрировать их другим способом, вы можете сделать это в одном месте. Это сохраняет ваше исключение обработки DRY.

Pro tip: используйте throw; вместо throw ex;. Это будет держать оригинальная трассировка стека.

0 голосов
/ 25 октября 2011

Используйте библиотеку журналов, такую ​​как log4net , чтобы регистрировать такие исключения (регистрация их действительно не обрабатывает их напрямую, но вы используете обработку исключений - как только вы поймали исключение считается "обработанным").

ELMAH, как вы видели, используется для необработанных исключений.

Два подхода дополняют друг друга (ELMAH + библиотека журналов).

...