try- catch. Handling multiple exceptions the same way (or with a fall through)
这里已经发布了一个非常相似的问题。我的问题更进一步了。假设您希望捕获多种类型的异常,但希望以相同的方式处理它,是否有一种方法可以执行类似switch case的操作?
1 2 3 4 5 6 7 8 9 10 11 12 | switch (case) { case 1: case 2: DoSomething(); break; case 3: DoSomethingElse() break; } |
是否可以用同样的方法处理少数例外情况?类似的东西
1 2 3 4 5 6 7 8 9 10 11 12 13 | try { } catch (CustomException ce) catch (AnotherCustomException ce) { //basically do the same thing for these 2 kinds of exception LogException(); } catch (SomeOtherException ex) { //Do Something else } |
目前没有语言结构来完成您想要的任务。除非异常都源自基本异常,否则您需要考虑将公共逻辑重构为方法,并从不同的异常处理程序调用它。
或者,您可以按照本问题中的说明进行操作:
一次捕获多个异常?
我个人倾向于使用基于方法的方法。
您真的应该有一个basecustomException并捕获它。
这是从另一个发布中复制的,但我正在将代码拖到这个线程中:
抓到
1 2 3 4 5 6 7 8 9 10 |
比起在几个catch块中重复方法调用,我更喜欢这样。
在vb.net中,可以使用异常过滤器来表示,例如
不幸的是,无论出于什么原因,C的实现者至今拒绝允许在C中写入异常过滤代码。
您不应该捕获这么多自定义异常,但是,如果需要,您可以创建一个通用的
实际上,我从来没有做过这样或类似的事情,我也没有访问编译器进行测试的权限,但肯定会有这样的功能。不知道如何实际进行类型比较,或者C是否允许您用case语句替换if语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | try { } catch (System.Object obj) { Type type; type = obj.GetType() ; if (type == CustomException || type == AnotherCustomException) { //basically do the same thing for these 2 kinds of exception LogException(); } else if (type == SomeOtherException ex) { //Do Something else } else { // Wasn't an exception to handle here throw obj; } } |