c# – 很多catch块,但在所有的块中都有相同的功能

前端之家收集整理的这篇文章主要介绍了c# – 很多catch块,但在所有的块中都有相同的功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有这样的事情怎么办?
  1. try
  2. {
  3. //work
  4. }
  5. catch (ArgumentNullException e)
  6. {
  7. HandleNullException();
  8. Logger.log("ArgumentNullException " + e);
  9. DoSomething();
  10. }
  11. catch (SomeOtherException e)
  12. {
  13. HandleSomeOtherException();
  14. Logger.log("SomeOtherException " + e);
  15. DoSomething();
  16. }
  17. catch (Exception e)
  18. {
  19. HandleException();
  20. Logger.log("Exception " + e);
  21. DoSomething();
  22. }

现在我们可以看到,我正在尝试处理一些不同情况的异常.但是每当引发异常时,我总是在最后调用方法DoSomething().如果有异常,是否有更智能的方法调用DoSomething()?如果我在那里添加了一个finally块并调用了DoSomething(),那么即使没有异常,也会一直调用它.有什么建议?

解决方法

If I added a finally block and called DoSomething() there,it would always be called,even when there is no exception.

您正在寻找的内容CLI standard(分区IIA,第18章)中称为fault handler.尽管.NET实现了它们,但C#语言并不直接支持它们.但是,可以模拟它们:

  1. bool success = false;
  2. try
  3. {
  4. success = true;
  5. }
  6. catch (…)
  7. {
  8. }
  9. finally
  10. {
  11. if (!success)
  12. {
  13. DoSomething();
  14. }
  15. }

请注意,不需要在每个catch处理程序中设置标志,如此处的一些答案所示.简单地否定测试,您只需要在try块的末尾设置一次标志.

猜你在找的C#相关文章