[C#]例外處理Exception

Microsoft: Exception 類別
程式執行期間發生的錯誤,會丟出異常或丟出例外。

例外處理是所有開發工程師必學的,以下介紹比較常見的 Exception

  • 確認例外的什麼類型
  • 透過debug來檢查是第幾行造成異常

NullReferenceException

當嘗試對Null 物件取值時,所擲回的例外狀況。

尋找字串裡,B在第幾個位置出現,由於name是null, 所以程式時會丟出例外,範例如下:

string name = null;
int position = name.IndexOf('B');

錯誤如下:

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object

DivideByZeroException

嘗試將整數或 Decimal 值除以零時,所擲回的例外狀況。

分母不可以為零,程式在執行時, 會丟出例外,範例如下:

int i = 100;
int ans = i/0;

錯誤如下:

System.DivideByZeroException: Attempted to divide by zero.

ArgumentOutOfRangeException

引數超出有效值的範圍。

string value = "0123456789";

// 字串長度10, 叫用 Substring時, 傳入 100, 會丟出 ArgumentOutOfRangeException 例外
string result = value.Substring(100);

錯誤訊息如下:

System.ArgumentOutOfRangeException: startIndex cannot be larger than length of string.

ArgumentNullException

ArgumentNullException
當 Null 參考 (在 Visual Basic 中為 Nothing) 傳遞給不接受其為有效引數的方法時,所擲回的例外狀況。

不允許參數是null時,就會丟出ArgumentNullException

FormatException

引數格式無效或複合格式字串格式不正確時所擲回的例外狀況。

此用法是想使用字串插值,但因為語法錯誤,導致異常。

string template = "user_name: {bocky}"; 
string result = string.Format(template, "bocky");

錯誤如下:

System.FormatException: Input string was not in a correct format.

try…catch…finally

不要太依賴,若是能在開發時就想到需要檢查/判斷的地方,就先做好。

try
{
//程式執行區或可能發生異常的地方
}
catch (Exception ex)
{
//例外的處理方法,如秀出警告
}
finally
{
//無論是否有發生例外事件,都會執行這區塊
}

發佈留言

內容索引