为了账号安全,请及时绑定邮箱和手机立即绑定

C#“最终”块是否总是执行?

C#“最终”块是否总是执行?

C#
繁花如伊 2019-10-09 15:40:33
考虑以下代码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命令等被杀死。这非常重要,因为如果您编写绝对希望其运行的代码(例如手动执行回滚),否则将自动执行提交,您可能会遇到应用程序在此之前中止的情况。老实说,这是一种外部情况,但是在这些情况下要注意这一点很重要。


查看完整回答
反对 回复 2019-10-09
?
HUH函数

TA贡献1836条经验 获得超4个赞

从MSDN C#规范中try声明:


一的语句finally在控制离开块总是被执行try的语句。这是真实的,控制传送是否发生正常的执行结果,作为执行的结果break,continue,goto,或return语句,或作为关于传播异常出的结果try说明。

在某些情况下,finally块将不执行:


环境失败

不可捕获的异常类型

电源(检测)失败


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 361 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信