澄清异常处理

m.e*_*son 1 .net exception-handling exception winforms

我的理解是,当Exception抛出它时,它会冒出调用堆栈直到它被处理(在try/catch块中)并且如果这种情况永远不会发生,那么异常最终会到达Program.Main()并且如果仍然未处理被运行时视为"未处理的异常".

它是否正确?我搜索过高低,找不到任何与此相符的信息?我所说的任何不准确之处?

Eri*_*ert 7

我的理解是,当抛出异常时,它会冒出调用堆栈直到它被处理(在try/catch块中)并且如果这种情况从未发生过,则异常最终会到达Program.Main()并且如果仍未处理,则被运行时视为"未处理的异常".

您的描述虽然不是不准确,但却非常不完整; 你没有描述以下情况会发生什么:

  • 终于阻止了
  • 故障块
  • 用过滤器捕获块

请注意,C#语言不会公开最后两个CLR功能,但它们仍然存在.

这三种情况加上普通捕获块的控制流程可能非常复杂.

如果您想更全面地了解其工作原理,我建议您仔细阅读Christopher Brumme关于此主题的详细文章:

http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx