将特定捕获的异常传递给不太具体的捕获

时间:2010-03-04 08:56:54

标签: c# exception exception-handling c#-2.0

我目前在try块后使用两个catch块。第一个捕获SqlExceptions,第二个异常。 如果SqlException没有特定的消息,我希望它由一般的catch块处理。有没有办法可以将异常从第一个catch块传递到第二个catch块,还是我必须复制代码?

3 个答案:

答案 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所述。对不起,如果我误导。