簡體   English   中英

未指定異常類型時從try catch讀取異常

[英]Reading exception from try catch when exception type not specified

在您使用try catch塊的情況下。

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

有沒有辦法在catch塊中引用異常對象?

即:

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

編輯:我認為我不夠清楚。 我知道如何使用try catch塊捕獲異常。 我想知道的是,你有能力不為你的異常指定一個類型但是聲明塊在這種情況下仍然有一些方法來檢索異常對象嗎? 從你的答案判斷,但我認為沒有?

您需要捕獲您關心的異常類型。 執行此操作后,您將可以訪問該異常的所有屬性。

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

這是MSDN中的一個參考,以加快速度。

關於編輯:除非在catch語句中明確指定了異常,否則無法訪問拋出的異常。

是的,像這樣:

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

(最具體到最不具體)

沒有。

使用裸catch表示您不關心實際異常,否則,為什么不使用

catch (System.Exception ex)

抓住任何例外? 當然,您應該只捕獲您將處理的異常。

您需要指出要捕獲的特定異常類型,並將其分配給變量。

改為使用此語法:

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

您還可以包含多個 catch塊,並相應地更改異常類型。 但是,請記住,您應始終從大多數派生到最少派生的順序排序,以所有異常的基類結束, System.Exception

您通常也應該避免捕獲System.Exception ,而只是優先捕獲可以在catch塊中處理的派生異常,並且不會破壞程序的狀態。 捕獲System.Exception類是一個壞主意,因為您還將捕獲無法處理的異常,例如OutOfMemoryExceptionStackOverflowException

Microsoft在此處提供了有關最佳實踐的有用文章: 處理異常的最佳實踐

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM