1. 程式人生 > 實用技巧 >C#異常處理時不應該先捕獲再丟擲

C#異常處理時不應該先捕獲再丟擲

示例程式碼:

  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; }