C#:'throw'退出当前函数吗?

时间:2011-03-02 07:17:19

标签: c# exception-handling throw

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

7 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

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

答案 2 :(得分:1)

你尝试过吗? :)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

确实如此。它会生成一个异常,它会调用堆栈。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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