2010-03-04 91 views
0

我目前在try塊後使用兩個catch塊。第一個捕獲SqlExceptions,第二個Exceptions。 如果SqlException沒有特定的消息,我希望它由常規catch塊處理。有什麼辦法可以將異常從第一個catch塊傳遞到第二個,還是我必須複製代碼?通過從特定捕獲到特定捕獲的異常

回答

2

首先,你應該問自己,如果你真的想要趕上Exception。如果你不能處理這個異常,你不應該抓住它。

如果您確實想要捕捉到所有目的異常並在您的catch塊之間共享某種處理,那麼重複代碼並不是正確的方法。爲什麼不將處理封裝在方法中並從兩個塊調用?

+0

不幸的是(或者幸運的是)這不是我的代碼,所以重寫Exception catch塊不在我的範圍之內。 目前唯一的「處理」是顯示帶有例外消息的MessageBox,因此,現在將其提取到自己的方法可能是矯枉過正的。 – Rawling 2010-03-04 09:35:55

+0

在這種情況下,聽起來應該刪除一般的異常處理,並讓異常冒泡到捕獲所有處理程序或簡單地讓應用程序崩潰。 – 2010-03-04 09:40:27

+0

我的意思是,根據前面的人來說,一般的異常捕捉是正確的,這不是我嘗試重寫它的地方! 最後修復:刪除特定的異常catch塊並簡單地檢查一般塊內異常的類型。沒有代碼重複,因爲我們正在尋找特定的異常,而不是特定類型的異常,所以更有意義。 – Rawling 2010-03-04 12:10:42

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