我的理解是,当抛出Exception
时,它会冒出调用堆栈直到它被处理(在try / catch块中)并且如果这种情况永远不会发生,那么异常最终会到达目的地到达Program.Main()并且如果仍未处理则被运行时视为“未处理的异常”。
这是对的吗?我搜索过高低,找不到任何与此相符的信息?我所说的任何不准确之处?
答案 0 :(得分:7)
我的理解是,当抛出异常时,它会冒出调用堆栈直到它被处理(在try / catch块中)并且如果这种情况从未发生过,异常最终会到达Program.Main ()如果仍未处理,则被运行时视为“未处理的异常”。
您的描述虽然本身并不准确,但却极不完整;你没有描述以下情况会发生什么:
请注意,C#语言不会公开最后两个CLR功能,但它们仍然存在。
这三种情况加上普通捕获块的控制流程可能相当复杂。
如果您想更全面地了解其工作原理,我建议您仔细阅读Christopher Brumme关于此主题的详细文章:
http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx
答案 1 :(得分:2)
是的,这是正确的。这就是异常处理很重要的原因。
有关异常的有趣内容:http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx
答案 2 :(得分:2)
我的理解是,当抛出异常时,它会冒出调用堆栈直到它被处理(在try / catch块中)并且如果这种情况从未发生过,异常最终会到达Program.Main ()如果仍未处理,则被运行时视为“未处理的异常”。
除了在catch
区块内处理例外情况外,在以下情况下例外情况不会达到Program.Main()
(并且不包括断电等情况)
finally
块抛出异常,则原始异常将不再被传播。Program.Main()
。 (在较新版本的.NET运行时中。)