什么时候用try Catch
在你觉得容易出错的地方,一般大家会给整个大的程序try Catch一下,比如某个大的工作线程
事实上对性能影响不大,因为try Catch是为了防止不可预见的异常,不至于程序崩溃,所以不是经常中断,然后组织throw exception这样的大动作。
任何异常都用Try Catch吗
很多异常是可预见的,比如参数错误,比如事件有无订阅等等,最好用条件判断消除掉,因为try Catch不是把性能浪费在这个上面的。
Try Catch 语句 的层次
我习惯在调用 的第一层用try Catch,第二层其实没多大必要用,因为发生了异常,几乎程序运行的结果就不正确了,那么让异常返回到第一层,好看看是什么导致了异常,调试的时候方便。
Try Catch 返回的信息
最好返回比较详细的信息,这样对调试有利,现在一般用ex.TargetSite+ex.Message
Try Finally 用于释放资源
当有数据库连接,socket通信这些资源调用时,用try Finally 释放资源
测试结果:
try finally 异常会一直抛出,直到遇到一个Catch,如果一直没有,程序就会崩溃,且,try finally 语句块外的上一层语句在遇到一个Catch之前都会被跳过。
在下一层的Catch语句里面用throw exception可以将异常抛出到上一层,但上一层 语句块外的语句仍然会被跳过。
如果不用throw exception,那么异常将不再向上一层抛出,上一层语句块之外的语句可以被执行,上一层不会再抓异常。
return和 throw exception不兼容
exception 是中断当前程序,不断返回,抛出,直至遇到一个Catch才停下来,
return 是中断当前函数,返回原调用点。
如果前面一句是return,后面的exception就不会执行
如果前面一句是throw exception,后面的return 也不会执行
事实的需求也是不需要这两个兄弟兼容的,如果希望return一个值,那么在没有异常的情况下,可以return正确的值,如果发生了异常,直接throw exception ,在上一级看到异常,而发生异常是不成功的执行,返回一个值也没必要,有了exception嘛!