微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如果我有这样的事情怎么办?
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 called DoSomething() 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块的末尾设置一次标志.

原文地址:https://www.jb51.cc/csharp/98801.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐