C#異常處理時不應該先捕獲再丟擲
阿新 • • 發佈:2020-12-16
示例程式碼:
public SaveResultModel CheckDog() { SaveResultModel resultModel = null; try { resultModel.IsSuccess = false; } catch (Exception ex) { throw ex; }return resultModel; }
以上對異常的處理方式是非常錯誤,因為先捕獲再丟擲,會丟掉原異常的堆疊資訊,反而不容易排查bug了。
正確的處理方式有兩種:
1,不捕獲,全部在最外層捕獲,這樣不會損失異常的堆疊資訊;
2,丟擲一個新的異常,增加一些自定義訊息。如:
public SaveResultModel SaveDog(Dog model) { SaveResultModel saveResult = new SaveResultModel(); try { Dog dog2= null; dog2.Age = model.Age; } catch (Exception ex) { saveResult.ErrorMsg = ex.Message; saveResult.IsSuccess = false; saveResult.StatusCode = -1; throw new Exception("SaveDog時報錯,"+ex.Message,ex) ; }return saveResult; }