【发布时间】:2010-03-04 17:34:03
【问题描述】:
我目前在 try 块之后使用两个 catch 块。第一个捕获 SqlExceptions,第二个捕获异常。 如果 SqlException 没有特定消息,我希望它由通用 catch 块处理。有什么办法可以将异常从第一个 catch 块传递到第二个,还是必须复制代码?
【问题讨论】:
标签: c# exception exception-handling c#-2.0
我目前在 try 块之后使用两个 catch 块。第一个捕获 SqlExceptions,第二个捕获异常。 如果 SqlException 没有特定消息,我希望它由通用 catch 块处理。有什么办法可以将异常从第一个 catch 块传递到第二个,还是必须复制代码?
【问题讨论】:
标签: c# exception exception-handling c#-2.0
首先你应该问自己是否真的想抓住Exception。如果您无法处理异常,则不应捕获它。
如果您确实想捕获通用异常并在您的捕获块之间共享某种处理,则复制代码不是正确的方法。为什么不将处理封装在一个方法中并从两个块中调用呢?
【讨论】:
在这种情况下,您将不得不复制代码。
您不能将异常冒泡到较低的 catch 块中,尽管您可以在异常块中重新抛出它并让调用函数处理它。
【讨论】:
假设 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 所问的那样。对不起,如果我误导了。
【讨论】: