如果我有这样的事情怎么办?
- 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(),那么即使没有异常,也会一直调用它.有什么建议?
解决方法
If I added a
finally
block and calledDoSomething()
there,it would always be called,even when there is no exception.
您正在寻找的内容在CLI standard(分区IIA,第18章)中称为fault handler.尽管.NET实现了它们,但C#语言并不直接支持它们.但是,可以模拟它们:
- bool success = false;
- try
- {
- …
- success = true;
- }
- catch (…)
- {
- …
- }
- …
- finally
- {
- if (!success)
- {
- DoSomething();
- }
- }
请注意,不需要在每个catch处理程序中设置标志,如此处的一些答案所示.简单地否定测试,您只需要在try块的末尾设置一次标志.