c# – 很多catch块,但在所有的块中都有相同的功能
发布时间:2020-12-15 18:31:59 所属栏目:百科 来源:网络整理
导读:如果我有这样的事情怎么办? try{ //work}catch (ArgumentNullException e){ HandleNullException(); Logger.log("ArgumentNullException " + e); DoSomething();}catch (SomeOtherException e){ HandleSomeOtherException(); Logger.log("SomeOtherExceptio
如果我有这样的事情怎么办?
try { //work } catch (ArgumentNullException e) { HandleNullException(); Logger.log("ArgumentNullException " + e); DoSomething(); } catch (SomeOtherException e) { HandleSomeOtherException(); Logger.log("SomeOtherException " + e); DoSomething(); } catch (Exception e) { HandleException(); Logger.log("Exception " + e); DoSomething(); } 现在我们可以看到,我正在尝试处理一些不同情况的异常.但是每当引发异常时,我总是在最后调用方法DoSomething().如果有异常,是否有更智能的方法来调用DoSomething()?如果我在那里添加了一个finally块并调用了DoSomething(),那么即使没有异常,也会一直调用它.有什么建议? 解决方法
您正在寻找的内容在CLI standard(分区IIA,第18章)中称为fault handler.尽管.NET实现了它们,但C#语言并不直接支持它们.但是,可以模拟它们: bool success = false; try { … success = true; } catch (…) { … } … finally { if (!success) { DoSomething(); } } 请注意,不需要在每个catch处理程序中设置标志,如此处的一些答案所示.简单地否定测试,您只需要在try块的末尾设置一次标志. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |