2011-04-18 97 views
2

在使用try catch塊的情況下。當異常類型未指定時,從try catch讀取異常

try { 
    //Do my work! 
} 
catch 
{ 
    //Handle my exception 
} 

是否有某種方法可以引用catch塊中的異常對象?

即:

try { 
    //Do my work! 
} 
catch 
{ 
    //Handle my exception 
    MyUndefinedExceptionObject.Message ???? 
} 

編輯:我不認爲我是清楚的 足夠了。我知道 通常會如何使用try catch catch塊捕獲異常。我想知道的是 給定您有能力不 指定您的例外類型,但 聲明塊仍然有一些 方式檢索異常對象 在這種情況下?通過你的回答判斷 但是我認爲沒有?

回答

5

你會想要捕捉你關心的異常類型。當你這樣做時,你將有權訪問該異常的所有屬性。

try 
{ 
    //Do my work! 
} 
catch (MyExceptionType e) 
{ 
    string s = e.Message; 
} 

這裏是一個reference in MSDN,以趕上速度。

關於你的編輯:沒有辦法訪問拋出的異常,除非你的catch語句中明確指定了異常。

+0

+1。擊敗我! :) – 2011-04-18 07:35:48

+0

但是,我很好奇你的用例,馬克西姆。謹慎闡述? – 2011-04-18 07:47:44

+0

沒有用例。只是對語言結構和規格的好奇。 – 2011-04-18 08:11:06

2

是的,是這樣的:

try 
{ 
    //Do my work! 
} 
catch (mySpecificException myEx) 
{ 
    //Handle my exception 
} 
catch (Exception ex) 
{ 
    //Handle my exception 
} 

(最具體到最不具體)

1

您需要指明的具體類型,你正趕上異常,並將其賦值給一個變量。

做,使用這樣的語法來代替:

try 
{ 
    // Do work 
} 
catch (MyUndefinedExceptionObject ex) 
{ 
    Debug.WriteLine(ex.Message); 
} 

還可以包括多個異常相應地變化型catch塊。但是,請記住,您應始終將其從開始訂購,其中大部分派生到至少派生,結束於所有例外的基類,System.Exception

你也應該從一般捕System.Exception,而是寧願趕上派生的異常,你可以在catch塊量力而行,並且不會破壞程序的狀態。捕捉System.Exception班是一個壞主意,因爲您還會發現您無法處理的例外情況,例如OutOfMemoryExceptionStackOverflowException

微軟對最佳實踐這裏一個有用的文章:Best Practices for Handling Exceptions

2

使用裸catch表明你不關心實際的異常,否則,爲什麼不使用

catch (System.Exception ex) 

捕捉任何異常?當然,你只應該捕捉你將要處理的異常。