iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
Software Development

C#世界初探險系列 第 22

2022鐵人賽 Day 22 例外(try)處理

  • 分享至 

  • xImage
  •  

嗨嗨~今天要來說說很好用的東西(?)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)目前例外狀況的方法。

今天就先到這邊結束啦
大家掰掰


上一篇
2022鐵人賽 Day 21 建立方法/事件
下一篇
2022鐵人賽 Day 23 自訂例外處理
系列文
C#世界初探險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言