# try...catch...finally try...catch 是 C# 中用來處理異常的結構,幫助你在程序出錯時進行控制和修正,而不會讓程序直接崩潰。這是異常處理的一個核心概念。 ### try...catch 的基本結構 ``` try { // 嘗試執行可能會拋出異常的代碼 } catch (ExceptionType ex) { // 異常處理代碼:捕捉並處理異常 } ``` * try 區塊: 包含可能會拋出異常的代碼。如果這部分代碼發生了異常,控制流將跳到對應的 catch 區塊。 * catch 區塊: 捕捉並處理在 try 區塊中拋出的異常。ExceptionType 是捕捉的異常類型,ex 是異常對象,通常可以用來獲取異常的詳細信息。 以下是一個使用 try...catch 來處理除數為零異常的簡單示例: ``` using System; class Program { static void Main() { try { int numerator = 10; int denominator = 0; // 除數為零,會拋出異常 int result = numerator / denominator; // 這行會拋出 DivideByZeroException Console.WriteLine($"Result: {result}"); } catch (DivideByZeroException ex) { // 捕捉除數為零異常並處理 Console.WriteLine("Error: Division by zero is not allowed."); Console.WriteLine($"Exception Message: {ex.Message}"); } } } ``` 進階用法 * 多個 catch 區塊: 可以有多個 catch 區塊來處理不同類型的異常。 ``` try { // 可能拋出異常的代碼 } catch (DivideByZeroException ex) { // 處理除數為零的異常 } catch (FormatException ex) { // 處理格式異常 } catch (Exception ex) { // 處理其他所有異常 } ``` * finally 區塊: 無論是否發生異常,finally 區塊中的代碼都會執行,通常用於清理操作。 ``` try { // 可能拋出異常的代碼 } catch (Exception ex) { // 處理異常 } finally { // 不論是否發生異常,這裡的代碼都會執行 Console.WriteLine("Cleanup code here."); } ``` ### 簡單總結 什麼是 try...catch...finally? 1. try 區塊: 將可能會發生錯誤的代碼放在這裡。這就像在試圖進行某個操作(例如除法),明知可能會出錯(如除數為零),所以謹慎地將這段代碼包裹在 try 區塊中,預防意外情況的發生。 2. catch 區塊: 如果 try 區塊中的代碼真的出錯了(如除數為零的情況),catch 區塊會捕捉這個錯誤並加以處理。就好比一張安全網抓住了掉落的物體,防止它摔壞地面。catch 區塊可以顯示錯誤信息或執行其他修正措施。] 3. finally 區塊: 不論是否發生異常,finally 區塊中的代碼都會被執行。這通常用於執行清理工作,如釋放資源或關閉文件。finally 區塊就像是程序的收尾工作,確保所有該做的善後處理都完成。 補充 * catch 區塊中的變數 異常發生的情況: catch 區塊中的變數(如 ex)是用來處理在 try 區塊中發生的異常。如果沒有異常發生,catch 區塊中的代碼就不會執行,因此 catch 區塊中的變數也不會被使用到。這就是為什麼 catch 區塊中的變數不需要事先初始化。 * 自動初始化: 當異常發生時,catch 區塊會自動接收到異常對象,這個對象已經包含了異常的詳細信息。異常處理機制會確保在捕捉異常時,變數(例如 ex)已經被正確地賦值了。