考虑以下代码C#代码。是否执行“最终”块?public void DoesThisExecute() { string ext = "xlsx"; string message = string.Empty; try { switch (ext) { case "xls": message = "Great choice!"; break; case "csv": message = "Better choice!"; break; case "exe": message = "Do not try to break me!"; break; default: message = "You will not win!"; return; } } catch (Exception) { // Handle an exception. } finally { MessageBox.Show(message); }}哈,写完这些之后,我意识到自己可以在Visual Studio中自己测试一下。但是,请随时回答!
3 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
不,不是的。只要应用程序仍在运行,它将始终执行(FastFail异常,MSDN链接除外,就像其他提到的一样)。退出块的try / catch部分时将执行。
如果应用程序崩溃,它将不会执行:通过kill process命令等被杀死。这非常重要,因为如果您编写绝对希望其运行的代码(例如手动执行回滚),否则将自动执行提交,您可能会遇到应用程序在此之前中止的情况。老实说,这是一种外部情况,但是在这些情况下要注意这一点很重要。
HUH函数
TA贡献1836条经验 获得超4个赞
从MSDN C#规范中try声明:
一的语句finally在控制离开块总是被执行try的语句。这是真实的,控制传送是否发生正常的执行结果,作为执行的结果break,continue,goto,或return语句,或作为关于传播异常出的结果try说明。
在某些情况下,finally块将不执行:
环境失败
不可捕获的异常类型
电源(检测)失败
- 3 回答
- 0 关注
- 361 浏览
添加回答
举报
0/150
提交
取消