合并具有完全相同代码的 catch 块?
出于代码重用原因,我想将以下代码中的 catch 块合并
try
{
DoSomeInputOutput();
}
catch (InvalidOperationException ex)
{
HandleKnownException1(ex);
}
catch (InvalidDataException ex)
{
HandleKnownException1(ex);
}
catch (ArgumentNullException ex)
{
HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
{
HandleKnownException2(ex);
}
catch (ArithmeticException ex)
{
HandleKnownException2(ex);
}
catch (InvalidCastException ex)
{
HandleKnownException2(ex);
}
catch (Exception ex)
{
HandleUnknownException(ex);
}
到类似这样的内容:
try
{
DoSomeInputOutput();
}
catch (InvalidOperationException ex)
catch (InvalidDataException ex)
catch (ArgumentNullException ex)
{
HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
catch (ArithmeticException ex)
catch (InvalidCastException ex)
{
HandleKnownException2(ex);
}
catch (Exception ex)
{
HandleUnknownException(ex);
}
这可能吗?
谢谢。
I want to merge the catch blocks in the following code for code reuse reasons:
try
{
DoSomeInputOutput();
}
catch (InvalidOperationException ex)
{
HandleKnownException1(ex);
}
catch (InvalidDataException ex)
{
HandleKnownException1(ex);
}
catch (ArgumentNullException ex)
{
HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
{
HandleKnownException2(ex);
}
catch (ArithmeticException ex)
{
HandleKnownException2(ex);
}
catch (InvalidCastException ex)
{
HandleKnownException2(ex);
}
catch (Exception ex)
{
HandleUnknownException(ex);
}
to something like this:
try
{
DoSomeInputOutput();
}
catch (InvalidOperationException ex)
catch (InvalidDataException ex)
catch (ArgumentNullException ex)
{
HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
catch (ArithmeticException ex)
catch (InvalidCastException ex)
{
HandleKnownException2(ex);
}
catch (Exception ex)
{
HandleUnknownException(ex);
}
Is that possible somehow?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果你有一个像样的异常层次结构,那么你只能做这样的事情,然后你可以捕获层次结构中较高类型的异常。然而,异常层次结构在设计上就非常浅,并且不能保证您会希望仅基于层次结构以相同的方式处理异常。除此之外......这些都对您的示例中使用的标准异常类型没有帮助。
You could only do something like this if you had a decent hierarchy of exceptions, then you could catch a an exception of a type higher up in the hierarchy. However, exception hierarchies are meant to be pretty shallow by design and there is no guarantee that you would want to handle the exceptions the same way based solely on the hierarchy. And besides... none of that would help with standard exception types used in your example.
据推测,您在不止一个地方执行此操作。如果是这样,为什么不这样做:
Presumably, you do it in more than one place. If so, why don't you do this:
否(或至少:除非您想要分组的异常发生以共享特定于该组的公共基类,但在您的示例中却没有);在这种情况下,您唯一能做的就是
catch (Exception ex)
并对ex
进行运行时测试。当您完成此操作时,我希望您的代码已经“更漂亮”(因为,重要的是,您已经将处理代码重构为方法)。我很想调整间距,这样我就可以专注于重要代码:(
或其他东西)。
在某些方面,这也与这个问题有关:开关/模式匹配想法。
No (or at least: not unless the exceptions you want to group happen to share a common base-class specific to that group, which they don't in your example); the only thing you can do in this scenario is
catch (Exception ex)
and do runtime testing onex
. By the time you've done that, I expect your code is already "prettier" as-is (since, importantly, you've already refactored the handling code into a method).I'd be tempted to tweak the spacing so I can focus on the important code:
(or something).
In some ways this also ties into this question: switch / pattern matching idea.