【发布时间】:2012-12-27 05:13:12
【问题描述】:
如果我有这样的事情怎么办:
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(),它总是会被调用,即使没有例外。有什么建议吗?
【问题讨论】:
-
@JanesAbouChleih 然后,他没有冗余代码来调用方法,而是有冗余代码来设置布尔值。
-
@Eve:用冗余的标志设置替换冗余的方法调用仍然是一种改进。让我们假设 OP 在某个时候想要用
DoSomethingElse替换DoSomething。有了标志,他/她只需在一处修改代码。如果没有标志,可能需要以相同的方式修改多个位置。如果 OP 忽略了其中一个怎么办?所以恕我直言,引入标志可以改善 DRY(不要重复自己)并消除潜在的错误源。 -
@stakx 使用我的解决方案(只有一个
catch块,请参阅我的答案),我认为他消除了“DRY”(代码重复),而没有引入像didAnyCatchBlockRun这样的痛苦布尔值。 -
@JeppeStigNielsen:请参阅我对您上述评论的回复。
标签: c# .net exception try-catch