.NET异常处理最佳实践方案

本文分享了在.NET开发中高效利用异常处理的实践方案,包括及早检查、避免相信外部数据、合理抛出异常、记录异常信息、避免吞掉异常、经常使用Using语句、避免异常控制流程、为关键错误使用异常、正确处理异常堆栈追踪以及标记异常为可序列化。通过遵循这些建议,开发者可以提高代码质量和维护性。

        这段时间在准备.NET错误处理方面知识的时候,找到一些不错的东西,这里拿来给大家分享。

        关于.NET的异常处理,其实和JAVA是非常类似的,都是有了GC(垃圾回收器)。而在早期的VB/C/C++中貌似是没有垃圾回收这个说法的,关于GC的各个好处大家都心知肚明了。那么,我们各位“猿”应该如何利用GC,更高效的编程呢?

        说实话,这部分内容不太好整理,也不太好说明白。这些天反复整理这些内容,总觉得没有抓住重点,花了非常大的功夫。后来想想,了解他的机制,倒不如多学学如何更好的利用它。

        在此之前,先说一些基本的概念。

        错误:程序中的错误一般分为三类:语法错误、逻辑错误、运行时错误。在异常处理中,错误主要说的是运行时错误,即已编译好的程序在执行过程中出现的问题。

        异常:由于错误的出现,运行时创建的用于处理错误的对象。

        这里要强调的是:错误是指一个事件,而异常则是为了处理这个事件而创建的对象。

 

        这里给出一些好的实践方案,或者也可是说是异常处理原则。

        1、及早检查。

                发现问题越早,这个问题就越容易解决
        2、不要相信外部数据

                所有的外部数据都应该被检查(数据库、文件、键盘等)
        3、尽量不要抛出new Exception()

                Exception是一个非常大的类,包含的信息量大
                尽量使抛出的异常有针对性,能提供有意义的错误信息。
        4、记录异常

                如果你捕获一个异常,一定要在某处加以记录,不要只记录.message中的信息,要记录所有的错误信息。
        5、不要吞掉异常

                你做的最糟糕的事情是在catch (Exception)后加了一个空的模块。
        6、经常使用Using

                即使在有异常出现的地方,关键字using也会阻止资源泄漏。例如

        using(SqlConnection conn = new SqlConnection())
        {
            //do something;
        }


        7、不要把异常处理方法作为从函数中返回信息的手段(不要用异常控制流程)

                不仅异常的处理缓慢,而且代码中许多的try/catch模块会导致代码很难维护。
        8、为那些不该被忽略的错误使用异常

                如果方法的执行有一定的要求或者前提,则应该使用异常,这样调用程序就不能忽略它(例如,某些方法需要用户信息)
        9、当再次抛出异常时不要清空堆栈追踪

 

                 Try  {

                        }
                 catch(Exception ex)
                 {

                     //错误的方式

                      throw ex;

                 }

                Try{

                      }
                catch(Exception ex)
                 {

                      //正确的方式

                     throw ;

                 }

       这里都是说捕获到异常之后再次抛出,之所以说第一种情况是错误,是因为,第一种情况下,抛出的是新的异常,原来的异常信息被覆盖掉了。而第二种情况会保留捕获到的异常信息,在原来错误的基础之上增加新的错误信息以抛出。

        10、异常应该用[Serializable]标识

                多数情况下需要异常是可序列化的。当从另一个异常类继承的时候,不要忘记增添这一属性。

这里也是借鉴了很多大牛的文章,自己感觉很受用,所以拿出来分享给大家。如果有什么不足或者更好的见解,多多提出!

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值