c# – 在catch和最后抛出异常. CLR行为与try-catch块
参见英文答案 >
When is finally run if you throw an exception from the catch block?????????????????????????????????????7个
我写了简单的C#控制台应用程序: class Mystery { static void Main(string[] args) { MakeMess(); } private static void MakeMess() { try { System.Console.WriteLine("try"); throw new Exception(); // let's invoke catch } catch(Exception) { System.Console.WriteLine("catch"); throw new Exception("A"); } finally { System.Console.WriteLine("finally"); throw new Exception("B"); } } } 控制台中给出的输出是:
似乎CLR捕获了A,并且根本没有调用finally块. 但是当我用try-catch块包围对MakeMess()的调用时: static void Main(string[] args) { try { MakeMess(); } catch(Exception ex) { System.Console.WriteLine("Main caught " + ex.Message); } } 输出看起来完全不同:
当在方法之外严格处理Exception时,似乎从MakeMess()传播的Exception是不同的. 这种行为有什么解释? 解决方法
您所看到的行为与最终阻止投掷无关.你只是在你的应用程序中有一个未处理的异常,当发生这种情况时,所有的赌注都会被关闭,包括最后的块是否运行:
从MSDN文档:
如果finally块必须运行,那么解决方案就是准确地完成你在第二个片段中所做的事情:处理未处理的异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |