.NET幫助 Try/Catch in C#(開發者的工作原理) Jacob Mellor 更新:2025年7月28日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 如果您是C#編程的新手,您可能經常聽到"try catch"語句這個術語。 在本教程中,我們將深入探討異常處理的世界,重點是catch塊,並探索如何使用try和catch語句使您的代碼更能抵抗錯誤。 我們將提供大量的現實生活例子來幫助您鞏固理解。 什麼是異常,為何需要處理它們? 在C#中,異常代表程序運行時發生的一個事件,會干擾程序執行指令的正常進程。 當異常發生時,程序的流程被打斷,如果不處理異常,程序將突然終止。 異常處理是一種預測和處理這些干擾事件的方式,使您的程序能從意外問題中恢復並繼續按預期運行。 通過使用try和catch塊,您可以確保您的代碼優雅地處理錯誤並向用戶提供有意義的反饋。 Try塊 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 } $vbLabelText $csharpLabel Catch塊捕獲異常 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); } $vbLabelText $csharpLabel 在這個例子中,try塊中的代碼嘗試進行0除,這將生成DivideByZeroException。 catch塊然後處理異常,並向用戶顯示消息。 多個Catch塊處理不同的異常 有時,您的try塊可能會生成不同類型的異常。 在這種情況下,您可以使用多個catch塊來分別處理每種異常。 以下示例展示了多個catch塊的使用: try { int[] numbers = new int[7]; numbers[12] = 70; // This line will throw an exception } 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; // This line will throw an exception } 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); } $vbLabelText $csharpLabel 在此示例中,try塊中的代碼嘗試為不存在的數組索引賦值,生成IndexOutOfRangeException。 第一個catch塊處理此特定異常,而第二個catch塊捕獲可能發生的任何其他異常。 請記住,在使用多個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); } $vbLabelText $csharpLabel 在上述示例中,第一個catch塊將僅在異常消息包含"divide"一詞時處理DivideByZeroException。 如果條件不滿足,第二個catch塊將處理異常。 Finally塊確保代碼執行 在某些情況下,您可能希望確保某段特定代碼被執行,無論是否發生異常。 為此,您可以使用finally塊。 finally塊放置在try和catch塊之後,無論是否發生異常都會執行。 這裡是一個展示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."); } $vbLabelText $csharpLabel 在上述示例中,即使try塊中的代碼未生成異常,finally塊仍會被執行。 自定義異常:根據需要定制異常處理 有時,您可能希望創建自己的自定義異常來處理代碼中的特定異常。 要做到這一點,您可以創建一個繼承自Exception類的新類。 以下是創建自定義異常的示例: public class CustomException : Exception { public CustomException(string errorMessage) : base(errorMessage) { } } public class CustomException : Exception { public CustomException(string errorMessage) : base(errorMessage) { } } $vbLabelText $csharpLabel 現在,您可以在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); } $vbLabelText $csharpLabel 在這個示例中,try塊拋出一個CustomException實例,然後由catch塊捕獲並處理。 IronPDF:結合異常處理的PDF功能集成 了解更多IronPDF資訊是用於在C#中創建、編輯和提取PDF文件內容的受歡迎的程式庫。 在本節中,我們將探索如何將IronPDF與您的try-catch異常處理方法結合起來,以優雅地處理潛在錯誤。 安裝IronPDF 首先,您需要安裝IronPDF的NuGet包。 您可以使用Package Manager Console進行安裝: 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 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 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); } $vbLabelText $csharpLabel 在此範例中,try塊包含創建PDF的IronPDF代碼。 如果在此過程中發生異常,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); } $vbLabelText $csharpLabel 在此範例中,try塊包含IronPDF提取PDF文字的代碼。 如果在此過程中發生異常,catch塊將處理錯誤,並向用戶顯示相關消息。 結論 藉由將IronPDF與您的try-catch異常處理方法相結合,您可以創建在處理PDF文件時能夠優雅地處理錯誤的穩健應用程式。 這不僅提高了您的應用程式的穩定性,還增強了整體用戶體驗。 請記得在處理像IronPDF這樣的外部程式庫時,務必考慮潛在異常,並使用try和catch語句適當處理它們。 這樣,您可以確保您的應用程式具有韌性和友好的用戶體驗,即使在處理意外問題時也是如此。 IronPDF提供了其程式庫的免費試用,讓您在不需任何承諾下探索其功能。 如果您決定在試用期間後繼續使用IronPDF,授權費用自$799開始。 常見問題解答 在 C# 中,try-catch 區塊的目的是什么? C# 中的 try-catch 區塊用於處理程式執行過程中發生的異常。try 區塊包含可能引發異常的程式碼,而 catch 區塊則包含處理錯誤的程式碼,允許程序順利運行。 在使用 C# 處理 PDF 時,如何實施異常處理? 在使用 C# 處理 PDF 時,您可以在涉及 PDF 創建或操作的操作周圍使用 try-catch 區塊來實施異常處理。這使您可以捕獲和處理潛在錯誤,例如文件未找到或格式無效,確保應用程序保持穩定。 為什麼在異常處理中使用 finally 區塊很重要? finally 區塊很重要,因為它確保無論是否拋出異常,特定的程式碼都會執行。這在釋放資源或執行清理任務(例如關閉文件流或數據庫連接)時特別有用。 您能否提供一個使用多個 catch 區塊的 C# 範例? 是的,在 C# 中,您可以使用多個 catch 區塊來處理不同類型的異常。例如,您可能有一個 catch 區塊來處理 FileNotFoundException,另一個用於處理 FormatException。這允許針對特定異常類型提供更精確的錯誤處理。 IronPDF 如何與 C# 中的異常處理集成? IronPDF 通過允許您在執行如將 HTML 轉換為 PDF 或從 PDF 文件中提取文本等操作時使用 try-catch 區塊,與 C# 中的異常處理集成。這種集成有助於管理潛在錯誤並增強應用程序的健壯性。 在使用 IronPDF 時可能遇到的常見異常有哪些? 使用 IronPDF 時的常見異常可能包括文件路徑不正確時的 FileNotFoundException 或 PDF 內容未正確渲染時的 InvalidOperationException。使用 try-catch 區塊來處理這些異常可以防止應用程序崩潰。 如何在 C# 項目中安裝 IronPDF 以處理 PDF? 要在 C# 項目中安裝 IronPDF,可以使用程序包管理器控制台命令 Install-Package IronPDF 或在 Visual Studio 的“管理 NuGet 程序包”對話框中搜尋 'IronPDF'。這將為您的項目添加必要的庫引用。 catch 區塊與異常篩選器有何不同? catch 區塊用於處理在 try 區塊中發生的異常,而異常篩選器則允許您指定條件,這些條件用於決定是否执行 catch 區塊。這是通過使用 when 關鍵字來完成的,提供了更細粒度的異常處理控制。 Jacob Mellor 立即與工程團隊聊天 首席技術官 Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。 相關文章 更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多 更新2025年12月20日 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新2025年12月20日 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C# For Each(開發者的工作原理)C# 擴展方法(開發者的工...
更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多