.NET 幫助

C# 捕獲多個異常(開發人員如何操作)

發佈 2024年6月6日
分享:

處理例外狀況在 C# 中正確地做好是至關重要的。 本教程將向您展示如何使用含有多個 catch 子句的 try-catch 區塊。 我們將講解如何捕獲多種異常類型、使用異常過濾器以及確保資源在結尾處被清除。 目的是幫助您構建健壯且能容錯的 C# 應用程式。

透過學習捕捉多種類型的異常,您可以針對特定問題調整回應,提高程式的可靠性。 我們還將討論如何使用 when 關鍵字來對 catch 塊應用條件,以實現更精確的錯誤處理。

本指南將提供您在編碼專案中順利捕獲例外情況並處理常見和複雜錯誤的方法。 我們還將探索IronPDF在例外處理的情境中。

什麼是例外處理?

C# 中的例外處理是一種用來處理運行時錯誤、防止程序異常終止以及在程序執行期間管理意外情況的方法。 例外處理的核心組成部分包括 trycatchfinally 區塊。

C# 中 Try-Catch 的基本結構

try 區塊包含可能觸發例外情況的程式碼,而 catch 區塊則負責處理如果例外情況發生時的處理。 finally 區塊是可選的,無論是否拋出異常,皆會在 trycatch 區塊後執行代碼。 這是一個簡單的結構:

try {
    // Code that may throw an exception
}
catch (Exception e) {
    // Code to handle the exception
}
finally {
    // Code that executes after try and catch, regardless of an exception
}
try {
    // Code that may throw an exception
}
catch (Exception e) {
    // Code to handle the exception
}
finally {
    // Code that executes after try and catch, regardless of an exception
}
Try
	' Code that may throw an exception
Catch e As Exception
	' Code to handle the exception
Finally
	' Code that executes after try and catch, regardless of an exception
End Try
VB   C#

捕獲多個異常

在實際應用中,單個操作可能會拋出不同類型的異常。為了解決這個問題,C#允許您為單個try塊定義多個catch塊。 每個 catch 區塊可以指定不同的異常類型來處理所有的異常。

為什麼要捕捉多個異常?

捕捉多個異常對於詳細的錯誤處理至關重要,其中的操作取決於發生的具體錯誤。 它使開發人員可以根據特定錯誤的上下文,以適當的方式處理每個例外情況。

如何實現多個捕獲塊

以下是一個實現單個捕獲塊來捕獲多個異常類型的示例:

try {
    // Code that may throw multiple types of exceptions
    int[] numbers = {1, 2, 3};
    Console.WriteLine(numbers[5]); // This will throw an IndexOutOfRangeException
}
catch (IndexOutOfRangeException ex) {
    Console.WriteLine("An index was out of range: " + ex.Message);
}
catch (DivideByZeroException ex) {
    Console.WriteLine("Can't divide by Zero: " + ex.Message);
}
catch (Exception ex) {
    Console.WriteLine("Error: " + ex.Message);
}
try {
    // Code that may throw multiple types of exceptions
    int[] numbers = {1, 2, 3};
    Console.WriteLine(numbers[5]); // This will throw an IndexOutOfRangeException
}
catch (IndexOutOfRangeException ex) {
    Console.WriteLine("An index was out of range: " + ex.Message);
}
catch (DivideByZeroException ex) {
    Console.WriteLine("Can't divide by Zero: " + ex.Message);
}
catch (Exception ex) {
    Console.WriteLine("Error: " + ex.Message);
}
Try
	' Code that may throw multiple types of exceptions
	Dim numbers() As Integer = {1, 2, 3}
	Console.WriteLine(numbers(5)) ' This will throw an IndexOutOfRangeException
Catch ex As IndexOutOfRangeException
	Console.WriteLine("An index was out of range: " & ex.Message)
Catch ex As DivideByZeroException
	Console.WriteLine("Can't divide by Zero: " & ex.Message)
Catch ex As Exception
	Console.WriteLine("Error: " & ex.Message)
End Try
VB   C#

在此程式碼中,像是 IndexOutOfRangeExceptionDivideByZeroException 這些特定的例外情況會分別由它們各自的 catch 區塊捕捉。 任何其他類型的例外情況都由通用的 Exception 捕獲塊捕獲。

使用例外過濾器與When關鍵字搭配

C# 也支援異常過濾器,允許您在 catch 區塊中指定條件。 此功能使用 when 關鍵字,根據運行時評估的條件提供更多控制,以決定捕獲哪些例外。

以下是使用 when 關鍵字來添加異常過濾器的方法:

try {
    // Code that may throw an exception
    throw new InvalidOperationException("Invalid operation occurred", new Exception("Inner exception"));
}
catch (Exception ex) when (ex.InnerException != null) {
    Console.WriteLine("Exception with inner exception caught: " + ex.Message);
}
catch (Exception ex) {
    Console.WriteLine("Exception caught: " + ex.Message);
}
try {
    // Code that may throw an exception
    throw new InvalidOperationException("Invalid operation occurred", new Exception("Inner exception"));
}
catch (Exception ex) when (ex.InnerException != null) {
    Console.WriteLine("Exception with inner exception caught: " + ex.Message);
}
catch (Exception ex) {
    Console.WriteLine("Exception caught: " + ex.Message);
}
Try
	' Code that may throw an exception
	Throw New InvalidOperationException("Invalid operation occurred", New Exception("Inner exception"))
Catch ex As Exception When ex.InnerException IsNot Nothing
	Console.WriteLine("Exception with inner exception caught: " & ex.Message)
Catch ex As Exception
	Console.WriteLine("Exception caught: " & ex.Message)
End Try
VB   C#

Finally 區塊的角色

finally 區塊用於在 try 和任何 catch 區塊完成後執行代碼。 它對於清理資源非常有用,例如關閉文件流或資料庫連接,不論是否發生例外情況。

try {
    // Code that might throw an exception
}
catch (Exception e) {
    // Handle the exception
}
finally {
    // Cleanup code, executed after try/catch
    Console.WriteLine("Cleanup code runs here.");
}
try {
    // Code that might throw an exception
}
catch (Exception e) {
    // Handle the exception
}
finally {
    // Cleanup code, executed after try/catch
    Console.WriteLine("Cleanup code runs here.");
}
Try
	' Code that might throw an exception
Catch e As Exception
	' Handle the exception
Finally
	' Cleanup code, executed after try/catch
	Console.WriteLine("Cleanup code runs here.")
End Try
VB   C#

IronPDF 介紹

IronPDF是一個專為在 .NET 應用程式中工作的 C# 開發人員設計的綜合性程式庫。 它幫助開發者操作、管理和直接從HTML創建PDF文件. 它不需要外部依賴即可運作。

您可以在不使用和安裝 Adobe Acrobat 的情況下執行任何 PDF 操作。 IronPDF 支援各種 PDF 功能,如編輯、合併、分割,以及透過加密和數位簽章來保護 PDF 文件。 開發人員可以在多種應用程式類型中使用 IronPDF,包括網路應用程式、桌面應用程式和服務。

Interlink:

IronPDF 的主要功能是轉換HTML轉PDF,同時保留佈局和樣式。 它非常適合從網頁內容生成 PDF,無論是用於報告、發票還是文件說明。 HTML 檔案、URL 和 HTML 字串都可以轉換為 PDF 檔案。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

範例程式碼

以下是一個使用 IronPDF 從 HTML 創建 PDF 的簡單 C# 範例,並包含多種異常的錯誤處理。 此範例假設您的專案中已安裝 IronPDF。 在 NuGet 控制台中運行此命令以安裝 IronPDF:

Install-Package IronPdf

以下是程式碼:

using IronPdf;
using System;
class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        try
        {
            // Convert HTML to PDF
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
            pdf.SaveAs("Exceptions.pdf");
            Console.WriteLine("PDF successfully created.");
        }
        catch (IronPdf.Exceptions.IronPdfProductException ex)
        {
            // Handle PDF generation errors
            Console.WriteLine("Failed to generate PDF: " + ex.Message);
        }
        catch (System.IO.IOException ex)
        {
            // Handle IO errors (e.g., disk I/O errors)
            Console.WriteLine("IO Exception: " + ex.Message);
        }
        catch (Exception ex)
        {
            // Handle other errors
            Console.WriteLine("Error" + ex.Message);
        }
    }
}
using IronPdf;
using System;
class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        try
        {
            // Convert HTML to PDF
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
            pdf.SaveAs("Exceptions.pdf");
            Console.WriteLine("PDF successfully created.");
        }
        catch (IronPdf.Exceptions.IronPdfProductException ex)
        {
            // Handle PDF generation errors
            Console.WriteLine("Failed to generate PDF: " + ex.Message);
        }
        catch (System.IO.IOException ex)
        {
            // Handle IO errors (e.g., disk I/O errors)
            Console.WriteLine("IO Exception: " + ex.Message);
        }
        catch (Exception ex)
        {
            // Handle other errors
            Console.WriteLine("Error" + ex.Message);
        }
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		Dim renderer = New ChromePdfRenderer()
		Try
			' Convert HTML to PDF
			Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>")
			pdf.SaveAs("Exceptions.pdf")
			Console.WriteLine("PDF successfully created.")
		Catch ex As IronPdf.Exceptions.IronPdfProductException
			' Handle PDF generation errors
			Console.WriteLine("Failed to generate PDF: " & ex.Message)
		Catch ex As System.IO.IOException
			' Handle IO errors (e.g., disk I/O errors)
			Console.WriteLine("IO Exception: " & ex.Message)
		Catch ex As Exception
			' Handle other errors
			Console.WriteLine("Error" & ex.Message)
		End Try
	End Sub
End Class
VB   C#

當我們執行此代碼時,它會在命令行中顯示此消息。

C# 捕捉多重例外(開發人員如何使用):圖 1

而這是由此代碼生成的 PDF 文件:

C# 捕捉多個異常(開發人員如何使用):圖2

確保在正確配置了 IronPDF 的環境中測試此項內容,並根據您的應用程式需求修改 HTML 內容。 這將幫助您有效管理錯誤,提高 PDF 生成任務的可靠性。

結論

C# 捕捉多個例外(此工作原理適用於開發人員):圖 3

在 C# 中處理多個例外是一個強大的功能,可為您的應用程式提供穩健的錯誤處理能力。 通過使用多個 catch 區塊、例外過濾器和 finally 區塊,您可以創建一個有彈性且穩定的應用程式,能夠優雅地處理不同的錯誤並在各種錯誤情況下保持其完整性。

對多重例外處理的全面理解和實施確保了您的應用程式能有效地準備好應對意外情況。 IronPDF 提供一個免費試用從 $749 開始。

< 上一頁
WebClient C#(它對開發人員的工作原理)
下一個 >
C# Lambda 表達式(它的運作方式對開發者來說)

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

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