C# overload try/catch
本文关键字:catch try overload | 更新日期: 2023-09-27 18:12:16
是否可以在c#中重载try/catch语句?如果做不到这一点,是否有可能继承并实现类似的功能?
我们正在将ELMAH添加到现有的web应用程序中,代码广泛使用try/catch,在验证摘要中显示错误,而不是显示错误页面。当错误在catch语句中被捕获时,ELMAH假定错误正在被处理;实际上,它们只是以一种更体面的方式被显示出来。
下面是它正在做的一个示例:
try
{
//code here...
}
catch (Exception ex)
{
customValidatorError.IsValid = false;
customValidatorError.ErrorMessage = ex.Message;
}
理想情况下,过载只会告诉Elmah通过ErrorSignal.FromCurrentContext().Raise(e);
由于该技术在项目中使用的频率,我不希望每次使用它时都添加该代码。为每个错误页添加自定义错误页,而不是将错误添加到验证摘要中,也超出了项目的范围。
正如您所发现的,在try/catch中包装所有内容通常并不是您真正想要的。您最终"吞下"了可能想要记录在某个地方的异常。如果您确实希望在使用自定义验证器的页面上显示异常消息,您可能应该重新抛出异常,以便您可以将其弹出。ASP。NET将允许您设置"全局"错误处理。如果想要吞下异常,可以在一个地方完成。如果您想要给ELMAH发信号或使用其他方法记录它们,您可以在一个地方这样做。这使你的异常处理保持DRY。
专业提示:使用
throw;
而不是throw ex;
。这将保持原始堆栈跟踪。
使用像log4net这样的日志库来记录这些异常(记录它们确实不是直接处理它们,但是您使用异常处理-一旦捕获到异常,它就被视为"已处理")。
ELMAH用于未处理的异常,如您所见。
这两种方法是互补的(ELMAH +日志库)。