例外處理,可以處理一些未知且發生錯誤的情況,例如: 輸入不合法(型別不符)的值、找不到要開啟的資料、處理資料時突然失去連線…。
在C# 例外處理使用 try-catch 陳述式
只要將一般陳述式放在try區塊,
當try區塊發生發生時,就會移向catch區塊,用Exception擷取錯誤
例如:
try
{
int[] ary = new int[] { 1, 2, 3 };
Console.Write(ary[11]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Exception types
前面提到,catch可以透過Exception來捕捉錯誤
並且,你也可以指定要捕捉哪種 Exception 錯誤
例如,捕捉找不到檔案時發生的錯誤、記憶體不足的錯誤…等
常見的 Exceptio 型別:
Exception types | 說明 |
---|---|
DivideByZeroException | 出現了"除以零"的錯誤形況 |
FileNotFoundException | 找不到檔案的錯誤形況 |
FormatException | 轉換數字、字串(例如: ToString、Parse..)發生錯誤、或使用複合格式、使用佔位符(例如:String.Format 和 Console.WriteLine…)等輸出字串時發生錯誤 |
IndexOutOfRangeException | 陣列或集合的索引值不正確(不存在或小於0) |
InvalidOperationException | 呼叫物件的方法時,發生錯誤 |
OutOfMemoryException | 記憶體不足 |
Exception | 所有錯誤狀況發生時 |
範例:
try
{
int[] ary = new int[] { 1, 2, 3 };
Console.Write(ary[11]);
}
//處理記憶體不足發生的情況
catch (OutOfMemoryException e) {
Console.WriteLine("Out of Memory");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Finally
try-catch 也可以搭配 Finally
無論是否拋出異常,都會執行finally區塊。
Finally 會放在 catch 之後 例如:
try
{
int[] ary = new int[] { 1, 2, 3 };
Console.Write(ary[11]);
}
catch (OutOfMemoryException e) {
Console.WriteLine("Out of Memory");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally {
Console.WriteLine("一定會執行");
}