csyx4.5-try和异常

try

catch-当try块里发生错误时,catch块就会被执行

finally-用来执行一些清理代码,无论是否有错误发生

catch块-对错误进行处理/重新抛出异常

finally块总是会被执行

可以有多个catch,每个catch会捕获特定类型的异常

catch子句指定了要捕获的异常的类型-这个异常必须是System.Exception或其子类

先记录log,再将异常重新抛出

可以使用多个catch子句来处理多个异常类型

ex-如果不是这3种异常,程序就会终止运行

将特定类型的异常捕获放在兜底的catch前面

如果不需要访问异常的书写,可以不指定异常变量

把异常类型和变量都去掉-则catch会捕获所有的异常

C#6-在catch子句里添加1个when子句-异常过滤器

finally块永远都会被执行,finally块通常用来写清理代码

唯一可以不让finally块执行的东西就是无线循环,或者程序突然结束

即使try语句块里执行了return,finally块依旧会被执行

IDisposable接口

这个接口定义了1个无参的Dispose方法用来清理这些资源

1的效果=2的效果

因为reader实现了IDisposable接口,所以using语句块执行完时,会自动调用Dispose方法

运行时/用户可以抛出异常

throw用来抛出异常

C#7抛异常

1.expression-bodied

2.三元条件表达式

记录日志后重新抛出异常

throw ex≠throw

throw ex-此时新传递的异常的StackTrace属性就不会反映原始错误了

throw到调用者的地方,让调用者处理

捕获了1个异常,抛出了1个更具体的异常类型,把原异常ex作为第二个参数传进去,有助于调试

捕获1个异常,抛出1个更抽象的异常-防止信息泄漏

System.Exception属性

StackTrace-字符串-展现了从异常发生地到catch块所有的被调用的方法

Message-关于错误的描述信息

InnerException-引起外层异常的内层异常

1.当方法的参数不正确

2.是1异常的1个子类,传入的参数为null,但预期的不应该为null

3.是1异常的1个子类,对于1个数值类型参数太大/太小

4.不合理的操作-对象的状态不适合让方法继续成功的执行-ex想读取1个文件的内容,但是文件还没有被打开

5.特定的功能不支持-ex1个只读的集合,向Add1个元素

6.还没有实现-方法体还没有实现?

7.想调用1个对象上的某个功能,但是对象已经被清理掉了

8.空指针/空引用异常,向调用1个对象,但此时这个对象为null-throw null

Parse/TryParse

如果解析失败

Parse方法会抛出异常

而TryParse方法会返回false

建议使用抛异常而不是错误代码-写1些自定义的异常抛出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值