编写高质量代码改善C#程序的157个建议——建议62:避免嵌套异常

建议62:避免嵌套异常

应该允许异常在调用堆栈上往上传,不要过多的使用catch,然后再throw。过多的使用catch会带来两个问题:

1)代码更多了。这看上去好像你根本不知道怎么处理异常,所以你总是不停地catch。

2)隐藏了堆栈信息,使你不知道真正发生异常的地方。

无故地嵌套是我们应该极力避免的。当然。如果真的需要捕获这个异常来恢复一些状态,然后重新抛出,代码看起来应该是这样的:

            try
            {
                //...
            }
            catch (Exception)
            {
                //工作代码
                throw;
            }

或者:

            try
            {
                //...
            }
            catch
            {
                //工作代码
                throw;
            }

尽量避免像下面这样引发异常:

            catch (Exception ex)
            {
                //工作代码 
                throw ex;
            }

直接throw ex而不是throw将会重置堆栈信息。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技