【发布时间】:2011-07-07 01:49:03
【问题描述】:
如果函数中间有throw语句,函数是否在此时终止?
【问题讨论】:
标签: c# exception-handling throw
如果函数中间有throw语句,函数是否在此时终止?
【问题讨论】:
标签: c# exception-handling throw
确实如此,是的。它会生成一个上升到调用堆栈的异常。
【讨论】:
是的,除了任何 finally 块,或者函数内有一个异常处理程序可以捕获您抛出的异常类型。
【讨论】:
是的。它将转到最近的catch 块。
【讨论】:
你试过了吗? :)
我想正确的答案是,这取决于。如果你出于某种奇怪的原因用 try/catch 包裹了投掷,那么不会。如果你没有,那么是的,除非你没有在调用堆栈的某处捕获异常,在这种情况下你的整个应用程序会崩溃。
【讨论】:
是的,除非你抓住它或有一个 finally 块:
try {
var foo = 42 /0;
}
finally
{
// This will execute after the exception has been thrown
}
【讨论】:
控制传递给调用堆栈中的下一个异常处理程序(catch 块),无论是在当前方法中还是在其父方法中。如果throw 没有封装在try/catch 块中,则在寻找父catch 块之前执行任何finally 块。
【讨论】:
异常是在不应该发生的情况下发生的事件,因此应用程序不知道如何处理此类事件。在所有 OOP 语言(我所知道的)中,运行时所做的是停止调用事件的函数,然后将异常抛出堆栈,直到有人知道如何处理它。这就是 try / catch 块的用武之地。
【讨论】: