「C#点滴」 关于异常处理的一些最佳实践

1.重新抛出异常时使用 throw代替 throw ex

如果要重新抛出异常,请直接使用 throw ; 因为在 catch 块中使用 throw ex 会丢失堆栈信息,throw 则不会。当然,如果对异常不做任何处理,只是简单地重新抛出,这种做法也是不可取的。

var client = new HttpClient(); string? result = null; try { result = await client.GetStringAsync(“http://www.baidu.com”); } catch(Exception ex) { //…一些处理异常的代码 // 直接使用 throw 而非 throw ex throw; } return result;

2.任何时候都不要吞没异常

有些初学者为了不让程序抛出异常,简单地用空 catch 语句吞没异常,这是典型掩耳盗铃,非常坏的习惯!对于异常,要做相应的处理,至少也要重新抛出!

var client = new HttpClient(); string? result = null; try { result = await client.GetStringAsync(“http://www.baidu.com”); } catch { // 错误,坚决杜绝!简单粗暴地 // 吞没了异常,典型的掩耳盗铃 } return result;

3. 使用多个 catch 捕获不同类型的异常

var client = new HttpClient(); string? result = null; try { result = await client.GetStringAsync(“http://www.baidu.com”); } catch (HttpRequestException ex) { // 处理 HttpRequestException 的代码 } catch (TaskCanceledException ex) { // 处理 TaskCanceledException 的代码 result = null; }

4.使用过滤器更加精确地处理异常

var client = new HttpClient(); string? result = null; try { result = await client.GetStringAsync(“http://www.baidu.com”); } catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.Forbidden) { // 处理 403 错误的代码 } catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { // 处理 404 错误的代码 } return result;

5.使用日志记录异常

产生异常后,应使用日志系统记录异常。记录异常时,应提供具体有意义的说明,同时记录异常对象本身。

catch (FileNotFoundException ex) { // 不推荐,信息太过模糊 this.logger.logError(ex,”发生了一些错误”); // 不推荐,没有记录异常对象本身,丢失了堆栈等重要信息 this.logger.logError(“找不到请求的文件”); // 推荐,记录异常对象的同时提供有意义的说明 this.logger.LogError(ex, “找不到请求的文件”); }

6.尽量使用系统预先定义好的异常

因为系统预定义的异常知晓度高,语义明确,让第三方开发者更容易理解。比如:

  • DivideByZeroException 零除异常
  • ArgumentNullException,参数为空异常
  • InvalidOperationException,非法操作异常
  • IndexOutOfRangeException,索引超界异常

在绝大多数情况下,系统预定义的异常足够使用了。只有在系统预定义异常无法满足要求的时候,才考虑自定义异常。自定义的异常应主要集中在业务和领域层面,异常的命名应该遵循 XxxException 的形式。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月13日
下一篇 2022年6月13日

相关推荐

  • 教你怎么查看Windows和macOS下网口的协商速率?包你一学就会

    前言 趁着618刚需,我在天猫上给手里的MacBook Pro新购买了一个「 USB-C转RJ-45 2.5G有线网卡 」,等我后面订购2.5G网口的NAS到货后,就可以使用了。趁…

    2022年6月16日
  • 这才是开发者神器正确的打开方式

    DevWeekly收集整理每周优质开发者内容,包括开源项目、工具资源、技术文章等方面,每周五首发于DevWeekly(https://github.com/Jackpopc/Dev…

    2022年7月25日
  • 技术标准-5人行的金融分布式账本技术安全规范

    人行发布金融分布式账本技术安全规范,是为了提升分布式账本应用设计更标准,安全合规,降低潜在的风险。各个大行,股份银行都在力推分布式建设。目前主流都是JAVA 编程X86分布式,支持…

    2022年6月16日
  • 国产卖到30万元以上,比亚迪凭什么?

    谢邀·一分钱一分货,高端车当然要有高价格参考车型: 汉DM-p四驱旗舰型,31.98万 唐DM-p(DM-i架构)旗舰版预计价格相当 比亚迪凭什么把车卖到30万以上? 不少汽车爱好…

    2022年7月26日
  • mpv到底选哪个?

    感谢邀请,今天我这个老车贩子有幸给你简单解答一下, 题主只说了mpv该选哪个,但是具体用途,预算或者更看重哪方面都没有说,那么咱们今天不说多专业的术语,我就用大白话多方面的帮你分析…

    2022年7月25日
  • 小白鞋才是永不过时的流行单品,时尚百搭又舒服,耐看还有气质

    #这么穿显气质# #这么穿显高级# 说到我们鞋柜里必须安排上的鞋子,那肯定就是小白鞋呀,无论是哪个季节,基本上人人都会对小白鞋爱不释手,毕竟它真的特别百搭,特别耐看,而且穿出来的时…

    2022年6月9日
  • 因发布Tik Tok视频,苹果员工或遭解雇

    果粉之家,专业苹果手机技术研究十年!您身边的苹果专家~ 俗话都说人怕出名猪怕壮,人一旦拥有一定知名度,一举一动都容易引起广泛的影响。但稍有偏颇就容易人仰马翻,而站得越高,摔得就越惨…

    2022年8月18日
  • 星环科技冲击科创板,大数据服务是一门好生意吗?

    随着5G时代来临,数据量爆炸式增长、数据复杂度不断提高,人工智能等前沿技术的发展催生了对非结构化数据的强劲需求,从而推动全球大数据市场高速增长。在国产替代背景下,中国大数据厂商迎来…

    2022年6月16日
  • 华为:2K+120Hz屏+鸿蒙系统+7250mAh大电池,跌至2706元

    国内用户对华为产品印象深刻,因为产品的品质很好,华为手机起步初期,因为体验不好,任正非经常批评余承东,最严重的一次是直接拿手机摔余承东脸上,才成就了华为手机的辉煌,在没有被断货时,…

    2022年8月26日
  • 国家网信办拟加强互联网跟帖评论服务管理

    新华社北京6月17日电 国家互联网信息办公室17日公布《互联网跟帖评论服务管理规定(修订草案征求意见稿)》,向社会公开征求意见。征求意见稿规定,跟帖评论服务提供者应当严格落实跟帖评…

    2022年6月18日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息