• C#8.0本质论第十一章--异常处理


    C#8.0本质论第十一章–异常处理

    11.1多异常类型

    关键字throw抛出异常实例,所选的异常类型应该能最好地说明发生异常的背景。

    11.2捕捉异常

    发生异常时,会跳转到与异常类型最匹配的catch块执行,匹配度由继承链决定。

    从C#6.0起,catch块支持一个额外的条件表达式。不是只根据异常类型来匹配,现在可以添加when子句来提供一个Boolean表达式,条件为true时catch块才处理异常。

    要避免异常条件表达式抛出异常

    11.3重新抛出现有异常

    C#5.0新增了一个机制,允许抛出之前抛出的异常而不丢失原始异常中的栈跟踪信息。这样即使在catch块外部也能重新抛出异常。

    11.4常规catch块

    C#要求代码抛出的任何对象都必须从System.Exception派生。

    C#支持常规catch块,即catch{},其行为和catch(System.Exception exception)块完全一致,只是没有类型名或变量名,此外,必须是所有catch块的最后一个,所以在同一个try/catch块语句中,加入这两个catch块同时出现,编译器会显示一个警告消息,因为常规catch块永远得不到调用。

    11.5异常处理规范

    ①只捕捉能处理的异常。

    ②不要隐藏(bury)不能完全处理的异常。

    ③尽量少用System.Exception和常规catch块。

    ④避免在调用栈较低的位置报告或者记录异常。

    ⑤在catch块中使用throw;而不是throw<异常对象>语句

    ⑥想好异常条件来避免在catch块中重新抛出异常。

    ⑦避免在异常条件表达式中抛出异常。

    ⑧避免以后可能变化的异常条件表达式。

    ⑨重新抛出不同异常时要小心。

    a)更改异常类型课更好地澄清问题。

    b)私有数据是原始异常的一部分

    c)异常类型过于具体,以至于调用者不能恰当地处理。

    11.6自定义异常

    11.7重新抛出包装的异常

  • 相关阅读:
    python基于PHP+MySQL的小区物业管理系统
    两种方式获取GeoServer发布的Web地图平铺服务(wmts)标准WMTSCapabilities.xml文件
    行业洞察 | 你的语音小助手的词汇量够吗?
    交互入门题瞎做
    keil报错:main.c(99): error: #20: identifier “xxx“ is undefined
    `英语` 2022/8/3
    JPA中@ElementCollection使用
    我们为什么要阅读webpack源码
    大型网站架构
    Sentinel熔断降级
  • 原文地址:https://blog.csdn.net/Story_1419/article/details/134260651