代码重构-异常处理
按照產生異常的原因是否明確,來區分異常的處理方式。避免在代碼中全部用try-catch 去檢測,甚至使用多重try-catch嵌套處理。
異常明確,可以檢測。
比如取錢,很顯然輸入的取錢金額不能大于余額(信用卡不在考慮之列),這種錯誤是可以檢測的,可排除的。
public void Withdraw (decmal amount){
if(amount>_balance){
throw new ArgumentException("amount too large");
}
_balance-=amount;
}
這種程序,參數如果錯誤,就會拋出異常。所以調用時,做好代碼檢查就行了,可以不用try-cath去捕獲
調用:
public void main()
{
if(account.CanWithdraw(amount)){
??? //withdraw money
}
else{
???? console.WriteLine("balance not enough");
}
}
又比如:文本框中要求錄入數字,完全不需要使用try-catch 去檢測
(你是否這樣在寫?)
public bool checkNumber(string input){
bool isNumber =false;
try{
????? int num = int.parse(input);
????? isNumber = true;
}
catch(Exception ex){
????? console.writeLine(ex.Message);
}
return isNumber;
}
代碼改為:
public bool checkNumber(string input){
return Regex.IsMatch(value, @"^[+-]?/d*[.]?/d*$");}
?
異常不明確,不可檢測。
例如:數據庫操作,鏈接數據庫查詢。如果數據庫服務器當機,或者傳遞的鏈接字符串參數錯誤,正常的代碼也會查詢失敗,會拋出鏈接異常等錯誤。像這類異常,具有不確定性,不好檢查。(使用try-catch,對拋出的錯誤進行捕獲)。
pulic void Connection(string strConn){
try{
???? SqlConnection conn = new SqlConection(strConn);
??? //...
}
catch(SqlException ex){
????? console.writeLine(ex.Message);
}
}
還比如:文件操作,也需要使用try-catch捕獲。
轉載于:https://www.cnblogs.com/iampkm/archive/2012/08/28/2660465.html
總結
- 上一篇: easyui datagrid 浏览器像
- 下一篇: 利用rpm包搭建lamp环境及论坛的创建