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

 

上一篇:工作中ibatis中的连表查询及in()的使用案例


下一篇:Spring - 源码分析:Spring是如何把Bean注册到IOC容器中的?