[C#] 使用try-catch捕捉與處理錯誤

閱讀時間約 6 分鐘

在程式設計中,錯誤處理是一個不可或缺的部分。C#提供了強大的錯誤處理機制,讓我們能夠更有效地管理和處理程式執行中可能出現的問題。本篇文章將帶你深入了解如何在C#中捕捉與處理錯誤,確保你的程式在遇到問題時能夠優雅地回應。

使用try-catch語句

在C#中,我們使用try-catch語句來捕捉和處理錯誤。try區塊內包含可能會拋出例外的程式碼,而catch區塊則定義了處理特定例外的程式碼。讓我們透過一個範例來了解如何使用try-catch:

using System;

class Program
{
static void Main()
{
try
{
// 可能會拋出例外的程式碼
int numerator = 10;
int denominator = 0;
int result = numerator / denominator;

Console.WriteLine("結果: " + result);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("捕捉到除以零的錯誤: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("捕捉到其他錯誤: " + ex.Message);
}
finally
{
Console.WriteLine("不論是否有錯誤,這個區塊都會執行。");
}

Console.WriteLine("程式繼續執行。");
}
}

在這個範例中,我們使用了try-catch語句來捕捉可能拋出的除以零的錯誤。如果發生這樣的錯誤,程式就會進入相對應的catch區塊。最後,不論是否有錯誤,finally區塊都會執行。

多個catch區塊

我們可以根據需要在try-catch語句中使用多個catch區塊。每個catch區塊可以捕捉不同類型的例外,這樣可以更精確地處理錯誤情況。以下是一個範例:

using System;

class Program
{
static void Main()
{
try
{
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]); // 這會拋出IndexOutOfRangeException
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("捕捉到索引超出範圍的錯誤: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("捕捉到其他錯誤: " + ex.Message);
}
}
}

在這個範例中,我們捕捉了IndexOutOfRangeException以及一般的Exception。藉由這種方式,我們能夠根據不同的錯誤情況提供更具體的處理方式。

使用finally區塊

除了try和catch,我們還可以使用finally區塊。finally區塊中的程式碼將在try-catch語句執行完畢後無論是否有錯誤都會執行。這是一個很好的地方來釋放資源或進行清理工作。以下是一個範例:

using System;

class Program
{
static void Main()
{
try
{
// 一些可能拋出例外的程式碼
}
catch (Exception ex)
{
// 處理錯誤
}
finally
{
// 執行清理工作
}
}
}

自訂例外

除了捕捉系統定義的例外,我們還可以建立自訂例外,以便更好地表達特定的錯誤情況。以下是建立自訂例外的範例:

using System;

class MyCustomException : Exception
{
public MyCustomException(string message) : base(message)
{
}
}

class Program
{
static void Main()
{
try
{
throw new MyCustomException("這是一個自訂的例外。");
}
catch (MyCustomException ex)
{
Console.WriteLine("捕捉到自訂例外: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("捕捉到其他錯誤: " + ex.Message);
}
}
}


在C#中,使用try-catch語句能夠幫助我們更好地捕捉、處理和回應程式執行中可能出現的錯誤。透過適當的錯誤處理機制,我們能夠提升程式的穩定性和可靠性,讓使用者有更好的使用體驗。記住根據不同情況使用不同的catch區塊,並在finally區塊進行必要的清理工作,這將有助於你建立更優質的程式。

63會員
117內容數
這裡將以輕鬆風格,深入探討程式設計的基礎和高級概念。從程式語言到演算法,我們將以易懂的方式解釋每個主題,讓你輕鬆掌握。無論你是初學者或有經驗者,都能在這裡找到適合你的內容。無論你的目標是成為專業開發者還是擴展知識,我們都會陪伴你一同成長!
留言0
查看全部
發表第一個留言支持創作者!
程式輕鬆玩 的其他內容
在這份教學文章中,我們將一步步示範如何使用C#程式語言和ZXing套件生成一個不顯示資訊的CODE128條碼。這將有助於您在自己的應用程式中生成純條碼圖片,而無需顯示任何附加的文字資訊。
在 C# 中,List 是一個常見且實用的集合類型,可以儲存一組元素並進行各種操作。本篇教學將帶你深入了解如何操作 List 以及進行降冪排序。我們將使用一系列範例程式碼來說明這些概念。
JSON(JavaScript Object Notation)是一種常用的數據交換格式,用於在不同的應用程序之間傳遞結構化數據。在C#中,我們可以使用Newtonsoft.Json模組來處理JSON資料。
Line Notify 是 LINE 提供的一個服務,讓您可以透過 API 傳送訊息到您的 LINE 好友或群組。在這篇教學文章中,我們將介紹如何使用 C# 透過 Line Notify 服務傳送訊息,同時確保連線是使用 TLS 1.2以上加密。
參數化查詢是一種將參數值傳遞給SQL語句的技術,這些參數值不會被直接解釋為SQL語法。這樣可以防止惡意用戶通過在輸入中插入惡意的SQL語法來攻擊資料庫。參數化查詢的一個主要優點是它能夠提高安全性,同時也能夠幫助資料庫優化查詢。
在C#程式設計中,處理字串操作是一個常見的任務。有時候,我們可能需要去除字串中不需要的空格,特別是在處理使用者輸入、讀取檔案或處理資料庫查詢結果時。在這篇教學中,我們將學習如何使用C#內建的方法來去除字串頭尾的空格。
在這份教學文章中,我們將一步步示範如何使用C#程式語言和ZXing套件生成一個不顯示資訊的CODE128條碼。這將有助於您在自己的應用程式中生成純條碼圖片,而無需顯示任何附加的文字資訊。
在 C# 中,List 是一個常見且實用的集合類型,可以儲存一組元素並進行各種操作。本篇教學將帶你深入了解如何操作 List 以及進行降冪排序。我們將使用一系列範例程式碼來說明這些概念。
JSON(JavaScript Object Notation)是一種常用的數據交換格式,用於在不同的應用程序之間傳遞結構化數據。在C#中,我們可以使用Newtonsoft.Json模組來處理JSON資料。
Line Notify 是 LINE 提供的一個服務,讓您可以透過 API 傳送訊息到您的 LINE 好友或群組。在這篇教學文章中,我們將介紹如何使用 C# 透過 Line Notify 服務傳送訊息,同時確保連線是使用 TLS 1.2以上加密。
參數化查詢是一種將參數值傳遞給SQL語句的技術,這些參數值不會被直接解釋為SQL語法。這樣可以防止惡意用戶通過在輸入中插入惡意的SQL語法來攻擊資料庫。參數化查詢的一個主要優點是它能夠提高安全性,同時也能夠幫助資料庫優化查詢。
在C#程式設計中,處理字串操作是一個常見的任務。有時候,我們可能需要去除字串中不需要的空格,特別是在處理使用者輸入、讀取檔案或處理資料庫查詢結果時。在這篇教學中,我們將學習如何使用C#內建的方法來去除字串頭尾的空格。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
由於遇到系統不支援歐洲語系的重音符號或變音符號因此有了這篇文章
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
Thumbnail
父母如何制定3C使用規則,需瞭解自己給予孩子使用3C的目的與時機,並制定好頻率與時間,確實執行並監督管理。
Thumbnail
  雖然Dart 語言本身支援跨平台的編譯方式,但在實務開發時還是不免需要使用外部非Dart語言所提供的函式庫進行功能開發且由於C 語言是最為廣泛且通用的程式語言,因此Dart語言也有提供支援與C語言函式庫互通性的方式;本篇主要是以MSVC作為C的編譯器來實作說明如何引用C語言會遇到的作法。
Thumbnail
3C除了會侵襲孩子的視力,連情緒、專注力、人際互動都會受影響, 但要因此禁止小孩接觸3C產品嗎? 其實3C並不可怕,而是錯誤的使用情境~ 🙋‍♀️本篇作伴要來給 爸比媽咪們建立孩子使用3C的小原則, 一起來為孩子的健康把關吧💓
Thumbnail
使用3C,對我來說是一種矛盾。 一方面,我不覺得用禁止的方式就會有好結果,畢竟總有一天孩子會接觸3C,雖然有人說過等孩子大一點再接觸也不遲,但我可以讓孩子二歲左右就使用剪刀,五歲時由他在後陽台用鐵槌和釘子釘木板⋯⋯,但為何面對3C產品就開始猶豫了?
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
由於遇到系統不支援歐洲語系的重音符號或變音符號因此有了這篇文章
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
Thumbnail
父母如何制定3C使用規則,需瞭解自己給予孩子使用3C的目的與時機,並制定好頻率與時間,確實執行並監督管理。
Thumbnail
  雖然Dart 語言本身支援跨平台的編譯方式,但在實務開發時還是不免需要使用外部非Dart語言所提供的函式庫進行功能開發且由於C 語言是最為廣泛且通用的程式語言,因此Dart語言也有提供支援與C語言函式庫互通性的方式;本篇主要是以MSVC作為C的編譯器來實作說明如何引用C語言會遇到的作法。
Thumbnail
3C除了會侵襲孩子的視力,連情緒、專注力、人際互動都會受影響, 但要因此禁止小孩接觸3C產品嗎? 其實3C並不可怕,而是錯誤的使用情境~ 🙋‍♀️本篇作伴要來給 爸比媽咪們建立孩子使用3C的小原則, 一起來為孩子的健康把關吧💓
Thumbnail
使用3C,對我來說是一種矛盾。 一方面,我不覺得用禁止的方式就會有好結果,畢竟總有一天孩子會接觸3C,雖然有人說過等孩子大一點再接觸也不遲,但我可以讓孩子二歲左右就使用剪刀,五歲時由他在後陽台用鐵槌和釘子釘木板⋯⋯,但為何面對3C產品就開始猶豫了?