拋出例外會中斷控制流程,若能在管理狀態的代碼中捕獲並恢復,系統更穩健。C++ 社群經六年(1994-2000)驗證出三級例外安全保證,C# 應全盤採用。
IDisposable 資源(參見原則 18)。Dispose、委派目標等特殊情境。public void PhysicalMove(string title, decimal newPay) {
// 1. 被動式複製(建構新值物件,驗證失敗會拋例外)
PayrollData d = new PayrollData(title, newPay, this.payrollData.DateOfHire);
// 2. 修改完成無例外,3. 原子性交換(值類型單指令,不拋例外)
this.payrollData = d;
}
交換參考類型會導致持有舊參考的用戶端看到過期資料。範例:
private DataSet _data;
public IListSource MyCollection => _data;
public void UpdateData() {
DataSet tmp = _data.Clone() as DataSet;
// ... 填充 tmp ...
_data = tmp; // 交換參考,舊 DataSet 仍被外部持有
}
解決:使用 DataSet.Merge 合併變更至現有實例,保持外部參考有效:
_data.Merge(tmp); // 原地更新,所有參考同步看到新資料
原則 6 建議優先使用值類型,交換模式對值類型最有效。
強式例外保證是錯誤恢復與簡單性的最佳平衡點。採用「複製-修改-交換」模式,謹慎處理參考類型交換,確保解構/釋放/委派不拋出例外,即可構建經得起例外衝擊的健壯系統。