我目前在try块后使用两个catch块。第一个捕获SqlExceptions,第二个异常。 如果SqlException没有特定的消息,我希望它由一般的catch块处理。有没有办法可以将异常从第一个catch块传递到第二个catch块,还是我必须复制代码?
答案 0 :(得分:2)
首先,你应该问自己是否真的要抓住Exception
。如果你无法处理异常,你就不应该抓住它。
如果您确实希望捕获所有目的异常并在catch块之间共享某种处理,则复制代码不是正确的方法。为什么不将处理封装在一个方法中并从两个块调用它?
答案 1 :(得分:1)
在这种情况下,您必须复制代码。
你不能将异常压缩到较低的向下捕获块,尽管你可以在异常块中重新抛出它并让调用函数处理它。
答案 2 :(得分: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抛出一个带有消息的ArgumentExeption(比如使用空构造函数创建的ArgumentException),它将由第一个Catch语句处理。所有其他异常将由第二个Catch语句处理,包括带有空消息的ArgumentException。
我认为如果VB.NET可以做到,C#可以(但假设可能非常错误)。
编辑:似乎C#中没有等同的代码结构,如here所述。对不起,如果我误导。