【问题标题】:Try-Catch error handiling in ASP.NETASP.NET 中的 Try-Catch 错误处理
【发布时间】:2014-03-04 07:59:45
【问题描述】:

我对 Try-Catch 块有一个疑问。

下面是我的代码

 private void PopulateDDL()
    {
        try
        {
            if (my condition)
            {
                code
            }
            else
            {
                throw new Exception(ErrorMessage);
            }
        }
        catch (Exception ex)
        {
            logerror(ex);
        }
    }

如果以下代码出错,将执行哪个 Catch 块 否则

        {
            throw new Exception(ErrorMessage);
        }

【问题讨论】:

  • 您定义的唯一 catch 块?是否意味着不止一个?
  • 其他 CATCH 块表示父方法,即从哪个方法调用此方法
  • 如果PopulateDLL()方法发生错误,将调用其catch块。如果错误在父方法中的某个位置,而不是PopulateDLL(),则会调用父方法的catch块。
  • 如果可能,也发布父方法。这将使我们能够更清楚地理解场景。

标签: asp.net error-handling try-catch


【解决方案1】:

来自MSDN

当抛出异常时,公共语言运行时 (CLR) 看起来 用于处理此异常的 catch 语句。如果当前 执行方法不包含这样的 catch 块,CLR 会查看 调用当前方法的方法,依此类推 堆。如果未找到 catch 块,则 CLR 显示未处理的 向用户发送异常消息并停止程序的执行。

你定义的catch块:

catch (Exception ex)
{
    RaiseWebError(ex);
}

将首先针对异常throw new Exception(ErrorMessage);执行

如果RaiseWebError 重新抛出异常,这将由调用堆栈(即您引用的父方法)进一步找到的下一个 try-catch 块处理。但是如果RaiseWebError 以某种方式处理异常(可能通过记录异常),执行将在第一次try-catch 之后继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2012-08-25
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多