更新:2007 年 11 月
當 C# 程式執行發生錯誤時,就會產生例外狀況。例外狀況會停止程式目前的流程,並且如果沒有執行任何動作,程式僅會停止執行。程式中的錯誤 (例如,數字除以零),或是某些未預期的輸入結果 (例如,使用者選取不存在的檔案) 會導致例外狀況。身為一個程式設計人員,您必須讓程式能夠處理這些問題且不會損毀而中止。
C# 提供幾個關鍵字 (try、catch 和 finally) 可以讓程式偵測和處理例外狀況,然後繼續執行。這些是非常有用的工具,可以讓應用程式更可靠。
Try 和 Catch
try 和 catch 關鍵字會同時使用。使用 try 包含可能產生例外狀況的程式碼區塊,然後使用 catch 包含如果發生例外狀況時就會執行的程式碼。在這個範例中,稍後就會攔截到計算所建立除以零的例外狀況。如果沒有 try 和 catch 區塊,這個程式就會失敗。
class ProgramTryCatch
{
static void Main()
{
int x=0, y=0;
try
{
x = 10 / y;
}
catch (System.DivideByZeroException)
{
System.Console.WriteLine("There was an attempt to divide by zero.");
}
}
}
良好的程式設計方式是指明 catch 程式碼偵測的例外狀況類型。每個 try 可以有多個 catch 陳述式,每個陳述式處理不同的例外狀況。
finally 區塊
不論是否發生例外狀況,一定會執行 finally 區塊中包含的程式碼。請使用 finally 區塊以確定會傳回資源:例如,確定已關閉檔案。
try
{
// Code to try here.
}
catch (SomeSpecificException ex)
{
// Code to handle exception here.
}
finally
{
// Code to execute after try (and possibly catch) here.
}
使用例外處理
例外狀況並不一定表示程式中發生嚴重的問題。通常是離開不相關程式碼區段的好方法,或是方法失敗的信號。許多 .NET Framework 類別方法會建立例外狀況警告特定狀況。
您也可以使用 throw 關鍵字產生自己的例外狀況。例如:
class ProgramThrow
{
static void DoWork(int x)
{
if (x > 5)
{
throw new System.ArgumentOutOfRangeException("X is too large");
}
}
static void Main()
{
try
{
DoWork(10);
}
catch (System.ArgumentOutOfRangeException ex)
{
System.Console.WriteLine(ex.Message);
}
}
}
當您覺得有可能引發某些未預期的情形時,請在程式中使用例外狀況。例如,當處理使用者的輸入、讀取檔案或從網際網路存取資訊時。