首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 例外觸發條件:throw 語句與執行時例外條件完整分類

     編輯:關於C#

兩大觸發來源

throw 陳述式詳解


// 拋出運算式結果 (必須為 Exception 或衍生類別)
throw new InvalidOperationException("狀態無效");

// 運算式結果為 null → 自動拋出 NullReferenceException
Exception ex = null;
throw ex; // 實際拋出 NullReferenceException

// 僅在 catch 區塊合法:重新拋出
catch (Exception ex) { throw; }

常見執行時例外條件對照表

來源機制範例
程式碼主動拋出throw 陳述式throw new ArgumentNullException(nameof(s));
執行時條件觸發CLR/硬體偵測到錯誤狀態除零、溢位、空參考、索引越界

整數溢位與 checked/unchecked 內文


// 預設 unchecked:溢位截斷 (回繞)
int a = int.MaxValue;
int b = a + 1; // b = -2147483648 (無例外)

// checked 內文:溢位拋出 OverflowException
checked {
    int c = int.MaxValue + 1; // 拋出 OverflowException
}

// 編譯器選項 /checked+ 可讓整個專案預設 checked

浮點數特殊行為

  • double / 0 → Infinity / -Infinity / NaN (不拋出例外)
  • float 同理
  • decimal / 0 → 拋出 DivideByZeroException

非同步/平行程式設計中的例外


// Task 例外包裝在 AggregateException
var task = Task.Run(() => { throw new InvalidOperationException(); });
try { task.Wait(); }
catch (AggregateException aex) {
    foreach (var ex in aex.Flatten().InnerExceptions)
        Console.WriteLine(ex.Message);
}

// async/await 自動解開 AggregateException
async Task Foo() {
    await Task.Run(() => { throw new InvalidOperationException(); });
}
// 呼叫端 try-catch 直接捕捉 InvalidOperationException

總結

例外觸發來源雙軌制:throw 由開發者控制業務邏輯錯誤;CLR 自動偵測系統層級違規 (記憶體、算術、型別安全)。理解各例外觸發條件,能在正確位置放置防禦檢查或 try-catch,建立健壯軟體。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
例外類別觸發條件屬於
NullReferenceException存取 null 參考的成員SystemException
IndexOutOfRangeException陣列/集合索引超出範圍SystemException
DivideByZeroException整數除以零 (浮點數回傳 Infinity/NaN)SystemException
OverflowException在 checked 內文中整數運算溢位SystemException
InvalidCastException型別轉換失敗 (如 (string)obj 但 obj 為 int)SystemException
ArgumentException方法參數不符合預期 (通常由程式碼主動 throw)SystemException
ArgumentNullException參數為 null 但不允許ArgumentException
ArgumentOutOfRangeException參數值超出允許範圍ArgumentException
InvalidOperationException物件狀態不適合該操作 (如集合修改中迭代)SystemException
NotSupportedException介面方法未實作/不支援 (如唯讀集合 Add)SystemException
ObjectDisposedException存取已 Dispose 的物件InvalidOperationException
StackOverflowException呼叫堆疊耗盡 (通常遞迴過深)SystemException (不可捕捉)
OutOfMemoryException記憶體耗盡SystemException (難以恢復)
TypeInitializationException靜態建構函式拋出例外SystemException