2023-08-22|閱讀時間 ‧ 約 7 分鐘

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

在程式設計中,錯誤處理是一個不可或缺的部分。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區塊進行必要的清理工作,這將有助於你建立更優質的程式。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.