Fel*_*oto 0 c# command-line-interface
可能重复:
最终没有在.net中执行的条件try..finally block
在C#中,finally块会在try,catch中执行,最后是否抛出未处理的异常?
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Finally_Blocks_and_Uncaught_Exceptions指出该finally块并不总是运行.那是对的,对吗?
CLI的ECMA标准(C#从中派生其异常特征)指出异常是在堆栈的两遍搜索中处理的.[13] 第一遍尝试找到匹配的catch块,如果没有找到则终止程序.只有找到匹配的catch块才会执行第二次执行,这将运行插入的finally块.这允许在没有程序状态首先被finally块修改的情况下诊断问题; 它还消除了当程序处于未知状态(例如外部数据损坏或抛出更多异常)时,最终块可能具有不良副作用的风险.
但是,我不需要一个catch来最终执行:
static void Main()
{
try { throw new Exception(); }
finally
{
Console.WriteLine("1");
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到没有人真正回答过你的问题,"这个文字是否正确?"
不,这是不正确的,因为它省略了重要的一点.
未能引用的CLI规范的相关部分是第I部分的第12.4.2节,其中规定:
每当块退出时,都应执行finally处理程序...,无论是由正常控制流还是由未处理的异常发生.
现在,正如其他人所指出的那样,这里有一些细微之处.请注意,规范明确地指出当块退出时执行finally .如果程序由failfast,堆栈溢出或某人将电源线拉出墙壁而终止,那么该块永远不会退出!程序可以在块退出之前终止,因此最终不会运行.
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |