.NET 幫助

C# 中的 Try/Catch(開發者的運作方式)

發佈 2023年5月16日
分享:

如果你是 C# 程式設計的初學者,你可能會經常聽到「try catch」語句這個詞。 在本教程中,我們將深入探討異常處理的世界,專注於 catch 區塊,並探討如何使用 try 和 catch 語句使您的代碼對錯誤更具彈性。 在此過程中,我們將提供大量的實際案例來幫助鞏固您的理解。

什麼是例外以及為什麼要處理它們?

在 C# 中,例外表示程序執行期間發生的事件,這種事件干擾了程序指令執行的正常進程。 當發生例外時,程式的流程會被中斷,如果例外沒有被處理,程式將會突然終止。

例外處理是一種預測和管理這些破壞性事件的方法,允許程式從意外問題中恢復並按預期繼續執行。 透過使用 try 和 catch 區塊,您可以確保程式碼優雅地處理錯誤,並向使用者提供有意義的回饋。

嘗試區塊

try 區塊是一個你預期可能會產生例外的程式碼段。 當您將代碼包裝在 try 區塊中時,您是在告訴編譯器您想要處理該區塊中可能出現的潛在例外。

以下是如何使用 try 區塊的基本範例:

try
{
    // Code that may generate an exception
}
catch (Exception ex)
{
    // handle the exception
}
try
{
    // Code that may generate an exception
}
catch (Exception ex)
{
    // handle the exception
}
Try
	' Code that may generate an exception
Catch ex As Exception
	' handle the exception
End Try
VB   C#

捕捉區塊捕捉例外狀況

catch 陳述是與 try 區塊結合使用來處理例外情況的。 當在 try 區塊中發生例外時,程式執行會跳轉到適當的 catch 區塊,在那裡可以指定程式應如何回應該例外。

要捕捉異常,您需要在 try 區塊之後立即建立一個 catch 區塊。 一個 catch 區塊通常包含一個參數,用來表示捕獲的例外。

以下是一個 catch 陳述式的範例:

try
{
    int result = 10/0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    int result = 10/0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
Try
	Dim result As Integer = 10\0
Catch ex As DivideByZeroException
	Console.WriteLine("An error occurred: " & ex.Message)
End Try
VB   C#

在此範例中,try 區塊中的程式碼嘗試除以零,這將產生 DivideByZeroException。 捕獲區塊接著處理異常,向使用者顯示一條訊息。

多重捕獲區塊處理不同例外情況

有時候,您的 try 區塊可能會產生不同類型的可能異常。 在這種情況下,您可以使用多個 catch 區塊來分別處理每種類型的例外。

以下範例展示了多個 catch 區塊的使用:

try
{
    int [] numbers = new int [7];
    numbers [12] = 70;
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("An index out of range error occurred: " + ex.Message);
}
catch (Exception e)
{
    Console.WriteLine("An unexpected error occurred: " + e.Message);
}
try
{
    int [] numbers = new int [7];
    numbers [12] = 70;
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("An index out of range error occurred: " + ex.Message);
}
catch (Exception e)
{
    Console.WriteLine("An unexpected error occurred: " + e.Message);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

在此示例中,try 區塊中的程式碼嘗試將一個值指定給不存在的數組索引,從而產生 IndexOutOfRangeException。 第一個 catch 區塊處理此特定例外,而第二個 catch 區塊則捕捉可能發生的任何其他例外。

請記得,在使用多個 catch 區塊時,應始終按從最具體到最一般的異常類型排序。

例外過濾器 將條件添加到捕獲區塊中

例外過濾器允許您向捕捉區塊添加條件,從而只有在滿足某個條件時才捕捉例外。 若要使用例外篩選器,請在 catch 語句中加入 when 關鍵字及條件。

以下範例演示了異常篩選器的用法:

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
}
try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
}
Try
	Dim result As Integer = 10 \ 0
Catch ex As DivideByZeroException When ex.Message.Contains("divide")
	Console.WriteLine("An error occurred: " & ex.Message)
Catch ex As DivideByZeroException
	Console.WriteLine("A different divide by zero error occurred: " & ex.Message)
End Try
VB   C#

在上述範例中,第一個 catch 區塊將僅在例外訊息包含“divide”一詞時處理 DivideByZeroException。 如果條件不滿足,第二個 catch 區塊將處理例外。

Finally 區塊確保程式碼執行

在某些情況下,您可能會希望確保執行特定的程式碼,即使發生異常也是如此。 要達到這個目的,你可以使用一個 finally 區塊。

在 try 和 catch 區塊之後放置一個 finally 區塊,無論是否發生例外情況,它都會被執行。

這是一個展示 finally 區塊用法的範例:

try
{
    int result = 10 / 2;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("This line will always be executed.");
}
try
{
    int result = 10 / 2;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("This line will always be executed.");
}
Try
	Dim result As Integer = 10 \ 2
Catch ex As DivideByZeroException
	Console.WriteLine("An error occurred: " & ex.Message)
Finally
	Console.WriteLine("This line will always be executed.")
End Try
VB   C#

在上面的例子中,即使 try 區塊中的代碼沒有生成異常, finally 區塊仍然會被執行。

自訂例外:根據您的需求量身打造例外

有時候,您可能會希望創建自己的自定義異常來處理程式碼中的特定異常。 要做到這一點,您可以創建一個繼承自 Exception 類的新類別。

這是一個創建自定義異常的示例:

public class CustomException : Exception
{
    public CustomException(string errorMessage) : base(errorMessage)
    {
    }
}
public class CustomException : Exception
{
    public CustomException(string errorMessage) : base(errorMessage)
    {
    }
}
Public Class CustomException
	Inherits Exception

	Public Sub New(ByVal errorMessage As String)
		MyBase.New(errorMessage)
	End Sub
End Class
VB   C#

現在,您可以在 try 和 catch 區塊中使用此自定義異常,如下所示:

try
{
    throw new CustomException("This is a custom exception.");
}
catch (CustomException ex)
{
    Console.WriteLine("A custom exception occurred: " + ex.Message);
}
try
{
    throw new CustomException("This is a custom exception.");
}
catch (CustomException ex)
{
    Console.WriteLine("A custom exception occurred: " + ex.Message);
}
Try
	Throw New CustomException("This is a custom exception.")
Catch ex As CustomException
	Console.WriteLine("A custom exception occurred: " & ex.Message)
End Try
VB   C#

在此範例中,try 區塊拋出一個 CustomException 實例,之後被 catch 區塊捕捉並處理。

IronPDF:整合 PDF 功能與異常處理

了解更多關於 IronPDF是一個受歡迎的庫,用於在 C# 中創建、編輯和提取 PDF 文件的內容。 在本節中,我們將探討如何將 IronPDF 與您的 try-catch 異常處理方法相結合,以優雅地處理潛在錯誤。

安裝 IronPDF

首先,您需要安裝 IronPDF NuGet 套件。 您可以使用套件管理器控制台來完成這項操作:

Install-Package IronPdf

或者,您可以在 Visual Studio 的「管理 NuGet 套件」對話框中搜索「IronPDF」。

使用IronPDF建立PDF並處理例外情況

假設您想要使用 IronPDF 從 HTML 字串創建 PDF 檔案. 由於創建 PDF 的過程中可能會引發異常,您可以使用 try-catch 區塊來處理它們。 以下是如何使用 IronPDF 創建 PDF 並使用 try-catch 處理異常的示例:

using IronPdf;
using System;
try
{
    var renderer = new IronPDF.ChromePdfRenderer();
    string html = "Hello, World!";
    PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
    PDF.SaveAs("output.PDF");
    Console.WriteLine("PDF created successfully.");
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
using IronPdf;
using System;
try
{
    var renderer = new IronPDF.ChromePdfRenderer();
    string html = "Hello, World!";
    PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
    PDF.SaveAs("output.PDF");
    Console.WriteLine("PDF created successfully.");
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
Imports IronPdf
Imports System
Try
	Dim renderer = New IronPDF.ChromePdfRenderer()
	Dim html As String = "Hello, World!"
	Dim PDF As PdfDocument = renderer.RenderHtmlAsPdf(html)
	PDF.SaveAs("output.PDF")
	Console.WriteLine("PDF created successfully.")
Catch ex As Exception
	Console.WriteLine("An unexpected error occurred: " & ex.Message)
End Try
VB   C#

在此範例中,try 區塊包含使用 IronPDF 建立 PDF 的程式碼。 如果過程中發生例外情況,catch 區塊將處理錯誤,並向使用者顯示相關的錯誤訊息。

从 PDF 提取文字及处理例外情况

您可能還想使用 IronPDF 從 PDF 文件中提取文本。 與前一個例子一樣,您可以使用 try-catch 區塊來處理潛在的例外情況。

以下是一個使用 IronPDF 從 PDF 文件中提取文本並處理異常的示例:

using IronPdf;
using System;
using System.IO;

try
{
    string pdfPath = "input.PDF";
    if (File.Exists(pdfPath))
    {
        PdfDocument PDF = PdfDocument.FromFile(pdfPath);
        string extractedText = PDF.ExtractAllText();
        Console.WriteLine("Text extracted successfully: " + extractedText);
    }
    else
    {
        Console.WriteLine("The specified PDF file does not exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
using IronPdf;
using System;
using System.IO;

try
{
    string pdfPath = "input.PDF";
    if (File.Exists(pdfPath))
    {
        PdfDocument PDF = PdfDocument.FromFile(pdfPath);
        string extractedText = PDF.ExtractAllText();
        Console.WriteLine("Text extracted successfully: " + extractedText);
    }
    else
    {
        Console.WriteLine("The specified PDF file does not exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
Imports IronPdf
Imports System
Imports System.IO

Try
	Dim pdfPath As String = "input.PDF"
	If File.Exists(pdfPath) Then
		Dim PDF As PdfDocument = PdfDocument.FromFile(pdfPath)
		Dim extractedText As String = PDF.ExtractAllText()
		Console.WriteLine("Text extracted successfully: " & extractedText)
	Else
		Console.WriteLine("The specified PDF file does not exist.")
	End If
Catch ex As Exception
	Console.WriteLine("An unexpected error occurred: " & ex.Message)
End Try
VB   C#

在 C# 中使用 Try/Catch(它如何為開發人員工作)圖 1

在此範例中,try 區塊包含使用 IronPDF 從 PDF 提取文本的程式碼。 如果在過程中發生例外情況,catch 區塊將處理錯誤,向使用者顯示相關信息。

結論

通過結合IronPDF通過您的 try-catch 例外處理方法,您可以創建穩健的應用程序,在處理 PDF 文件時優雅地處理錯誤。 這不僅提高了應用程式的穩定性,還增強了整體使用者體驗。

記得在使用像 IronPDF 這樣的外部庫時,務必考慮潛在的例外情況,並使用 try 和 catch 語句適當地處理它們。 這樣,您可以確保您的應用程式具有彈性並且對使用者友好,即使在處理意外問題時也是如此。

IronPDF 提供一個其庫的免費試用版,讓您在不需承諾的情況下探索其功能。 如果您決定在試用期後繼續使用IronPDF,授權價格從 $749 開始。

< 上一頁
C# For Each(開發人員如何運作)
下一個 >
C# 擴充方法(開發人員如何使用)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >