【问题标题】:C#: does 'throw' exit the current function?C#:“抛出”是否退出当前函数?
【发布时间】:2011-07-07 01:49:03
【问题描述】:

如果函数中间有throw语句,函数是否在此时终止?

【问题讨论】:

    标签: c# exception-handling throw


    【解决方案1】:

    确实如此,是的。它会生成一个上升到调用堆栈的异常。

    【讨论】:

    • 是否有任何相当于 Java 的 finally 块可以调整这个答案?
    • 有,是的。你确实得到了典型的 try、catch 和 finally 异常处理。
    【解决方案2】:

    是的,除了任何 finally 块,或者函数内有一个异常处理程序可以捕获您抛出的异常类型。

    【讨论】:

      【解决方案3】:

      是的。它将转到最近的catch 块。

      【讨论】:

        【解决方案4】:

        你试过了吗? :)

        我想正确的答案是,这取决于。如果你出于某种奇怪的原因用 try/catch 包裹了投掷,那么不会。如果你没有,那么是的,除非你没有在调用堆栈的某处捕获异常,在这种情况下你的整个应用程序会崩溃。

        【讨论】:

          【解决方案5】:

          是的,除非你抓住它或有一个 finally 块:

          try {
             var foo = 42 /0;
          }
          finally
          {
            // This will execute after the exception has been thrown
          }
          

          【讨论】:

          • ... 在 finally 的情况下,无论如何都会退出当前方法,即不会执行之后的代码。
          【解决方案6】:

          控制传递给调用堆栈中的下一个异常处理程序(catch 块),无论是在当前方法中还是在其父方法中。如果throw 没有封装在try/catch 块中,则在寻找父catch 块之前执行任何finally 块。

          【讨论】:

            【解决方案7】:

            异常是在不应该发生的情况下发生的事件,因此应用程序不知道如何处理此类事件。在所有 OOP 语言(我所知道的)中,运行时所做的是停止调用事件的函数,然后将异常抛出堆栈,直到有人知道如何处理它。这就是 try / catch 块的用武之地。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-12-22
              • 2012-06-28
              • 2018-10-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-09
              相关资源
              最近更新 更多