嗨嗨~今天要來說說很好用的東西(?)try
當程式執行時,難免會遇到一些例外狀態,如陣列索引超過範圍、數字碰到除以0等等,此時程式就會產生例外並自動結束程式執行,但有時應程式需求,不希望程式自動結束執行,希望能對這些例外加以處理,必須對這些例外撰寫程式碼做相關的處置,我們將此過程稱為例外處理(Exception Handle)。所以C#提供了try{...}catch{...}finally{...}敘述來解決處理例外問題,在程式中可將這些可能容易發生錯誤而需做檢查的程式碼寫在try{...}的程式區塊內,只要程式區塊中有任一敘述發生例外,程式就會尋找相對應的例外類別。
try
{
tryStatements; //受監視的程式碼
}
catch (exception1 ex) //滿足exception1執行catchStatements1
{
catchStatements1;
}
catch (exception2 ex) //滿足exception2執行catchStatements2
{
catchStatements2;
}
...
catch (exceptionN ex)
{
catchStatementsN;
}
finally
{
finallyStatements; //最後執行的程式碼
}
我們來做個簡單的練習吧,檢查除法除以0時的例外處理程式
namespace project
{
internal class Program
{
static void Main(string[] args)
{
int Divisor = 10, Dividend = 0, result;
try
{
result = Divisor / Dividend;
}
catch(System.DivideByZeroException ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
Console.WriteLine("執行finally");
}
}
}
}
在 .NET Framework提供以下常用的例外類別,可用來捕捉一些常用的例外
類別 | 說明 |
---|---|
ArgumentOutOfRangeException | 當引數值超過呼叫方法所規定的範圍所產生錯誤。 |
DivideByZeroException | 除數為0時所產生錯誤。 |
Exception | 程式執行時所產生錯誤。可捕捉所有例外 |
IndexOutOfRangeException | 索引值超過陣列所允許範圍。 |
InvalidCastException | 資料型態傳換所產生錯誤。如將字母轉數值。 |
OverflowException | 溢位時所產生錯誤。 |
再來是例外類別常用的成員(方法或屬性)
成員 | 說明 |
---|---|
GetBaseException方法 | 取得該例外類別所繼承的父類別。 |
GetObjectData方法 | 用於子類別中覆寫父類別的GetObjectData()方法,藉以設定例外狀況的相關資訊。 |
GetType方法 | 取得目前例外物件的型別。 |
ToString方法 | 取得目前例外狀況的文字說明。 |
HelpLink屬性 | 用來讀取或設定說明檔的路徑。 |
InnerException屬性 | 用來取得造成目前例外的例外物件。 |
Message屬性 | 取得例外的描述訊息。 |
Source屬性 | 取得發生例外的來源物件。 |
StackTrace屬性 | 取得發生例外的函式。 |
TargetSite屬性 | 取得擲回(throw)目前例外狀況的方法。 |
今天就先到這邊結束啦
大家掰掰