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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章