【发布时间】:2011-03-14 01:30:42
【问题描述】:
可能重复:
Will code in a Finally statement fire if I return a value in a Try block?
考虑以下代码 C# 代码。 “finally”块是否执行?
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 中完成测试。但是,请随时回答!
【问题讨论】:
-
没有。你会得到一个编译器错误。
-
唯一不能编译的是声明'ext'后缺少的分号。
-
@Zano - 失踪的;是一个错字:)
-
如果程序出乎意料地崩溃(灾难性的运行时错误就是这样一种异常,通常是通过调用 P/Invoke 的代码而造成的,这会弄乱堆栈),或者机器断电,那么不, finally-block 不会执行。
-
@Charles 为什么要这样? catch(Exception) 非常好,不需要指定一个变量来“catch into”。