日期:2014-05-20  浏览次数:20830 次

关于异常处理的简单问题
public void Test()
{
try{
  fun1();
  fun2();
  fun3();
  fun4();

catch(Exception ex)

   Console.WriteLine(ex.Message);


}
客户端调用Test方法,是不是只要在Test方法加个总异常捕获,fun1,fun2,..就不用进行异常处理?(fun1,fun2……不处理细节异常)。

------解决方案--------------------
可以这样做,如果你在fun1,fun2....里面处理了异常而没有throw的话,你Test方法中反而不能try到异常了,这就是常说的把异常吞掉了。
更多的做法是这样,在底层方法(fun1,fun2...)中捕获异常,并把底层的系统异常转化为业务异常并throw,然后上层捕获并处理业务异常。

比如fun1,fun2...是数据库操作的方法,在这个方法中可能会出现sql语句错误。

        void fun1()
        {
            try
            {
                //操作数据库
            }
            catch (Exception ex)
            {
                //或使用自定义异常
                throw new Exception("数据库操作错误!");
            }
        }

这样你可以在Test方法中继续捕获异常,显示在界面上。
因为很多时候操作数据库出现的异常会暴露数据库表名、列名等危险信息,不适合直接显示到界面上去。