如果我有这样的事情怎么办:
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
block 并在那里调用了 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
block 的末尾设置一次标志。
关于c# - 很多 catch block ,但它们都具有相同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298193/