【问题标题】:C# overload try/catchC#重载try/catch
【发布时间】:2011-12-15 02:12:59
【问题描述】:

是否可以重载 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); 将异常添加到日志中

由于该技术在项目中使用的频率,我不希望在每次使用时都添加该代码。为每个错误页面添加自定义错误页面而不是将错误添加到验证摘要中也超出了项目的范围。

【问题讨论】:

    标签: c# asp.net c#-4.0 error-handling elmah


    【解决方案1】:

    正如您所发现的,将所有内容都包含在 try/catch 中通常并不是您真正想要的。您最终会“吞下”您可能想要在某处记录的异常。如果您确实想使用自定义验证器在页面上显示异常消息,您可能应该重新抛出异常,以便您可以将其冒泡。 ASP.NET 将允许您设置“全局”错误处理。如果你想吞下异常,你可以在一个地方做到这一点。如果您想使用其他方法向 ELMAH 发送信号或记录它们,您可以在一个地方执行此操作。这使您的异常处理保持干燥。

    专业提示:使用throw; 而不是throw ex;。这将保持 原始堆栈跟踪。

    【讨论】:

      【解决方案2】:

      使用像log4net 这样的日志库来记录此类异常(记录它们确实不是直接处理它们,但是您正在使用异常处理 - 一旦您捕获到异常,它就会被视为“处理”)。

      如您所见,ELMAH 用于未处理的异常。

      这两种方法相辅相成(ELMAH + 日志库)。

      【讨论】:

        猜你喜欢
        • 2016-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多