我目前在try块后使用两个catch块。第一个捕获SqlExceptions,第二个Exceptions。 如果SqlException没有特定的消息,我希望它由常规catch块处理。有什么办法可以将异常从第一个catch块传递到第二个,还是我必须复制代码?通过从特定捕获到特定捕获的异常
0
A
回答
2
首先,你应该问自己,如果你真的想要赶上Exception
。如果你不能处理这个异常,你不应该抓住它。
如果您确实想要捕捉到所有目的异常并在您的catch块之间共享某种处理,那么重复代码并不是正确的方法。为什么不将处理封装在方法中并从两个块调用?
1
在这种情况下,您将不得不复制代码。
虽然可以将它重新抛入异常块并让调用函数处理它,但不能将异常向下放到catch块中。
1
假设Catch语句未嵌套,这个代码在VB.Net:
Try
SomeCode()
Catch ex As ArgumentException When ex.Message <> ""
Trace.WriteLine(String.Format("Caught argument exception with a message {0}", ex.Message))
Catch ex As Exception
Trace.WriteLine("Caught argument exception with no message, or some other type of exception")
End Try
如果SomeCode抛出了一个消息(如使用空构造创建的ArgumentException的),它将一个ArgumentExeption由第一条Catch语句处理。所有其他异常将由第二个Catch语句处理,包括具有空消息的ArgumentException。我假设如果VB.NET可以做到这一点,C#可以(但假设可能是非常错误的)。
编辑:它似乎没有C#中的等效代码结构,如here问。对不起,如果我误导了。
+0
这正是我想要做的!不幸的是,似乎C#不支持这一点。 – Rawling 2010-03-04 09:37:12
相关问题
- 1. 捕获PHP异常的特定实例
- 2. 捕捉特定的异常
- 3. 发送未捕获的异常到一个特定的方法
- 4. Java何时捕获一般异常和特定异常
- 5. 的Python:捕捉特定的异常
- 6. 使用Jdbc捕获特定的FK异常
- 7. 如何在发送邮件时捕获特定的异常?
- 8. 如何捕获JDBC中的特定异常?
- 9. 如何捕获我期望的特定异常?
- 10. 只在RxJava中捕获特定类型的异常2
- 11. 从特定点捕获字符串
- 12. 捕获异常
- 13. 异常捕获
- 14. 捕获异常
- 15. 捕获异常
- 16. C#winforms不会在特定情况下捕获异常
- 17. 通过tomcat和servlet捕获异常
- 18. Django的捕获异常和重定向
- 19. 通过Jquery/JS/Browser特定的API捕获打印事件
- 20. 从Xalan捕获异常
- 21. 从(ExecutorService)捕获异常CachedThreadPool
- 22. 如何捕获特定异常实例而不是特定异常类的任何实例?
- 23. 捕获块没有捕获异常
- 24. 捕获特定的修饰键
- 25. 从代码的特定部分抛出的异常没有被捕获
- 26. 捕获SQLAlchemy异常
- 27. 捕获iframe异常
- 28. jvm异常捕获
- 29. JNA捕获异常
- 30. JUnit异常捕获
不幸的是(或者幸运的是)这不是我的代码,所以重写Exception catch块不在我的范围之内。 目前唯一的“处理”是显示带有例外消息的MessageBox,因此,现在将其提取到自己的方法可能是矫枉过正的。 – Rawling 2010-03-04 09:35:55
在这种情况下,听起来应该删除一般的异常处理,并让异常冒泡到捕获所有处理程序或简单地让应用程序崩溃。 – 2010-03-04 09:40:27
我的意思是,根据前面的人来说,一般的异常捕捉是正确的,这不是我尝试重写它的地方! 最后修复:删除特定的异常catch块并简单地检查一般块内异常的类型。没有代码重复,因为我们正在寻找特定的异常,而不是特定类型的异常,所以更有意义。 – Rawling 2010-03-04 12:10:42