欢迎光临散文网 会员登陆 & 注册

编程技巧0001:C# 中如何一次 catch 多个异常?

2022-08-30 22:02 作者:zgcdboy  | 我要投稿

在项目开发中当抛出异常时,简单的用 System.Exception,但这种会捕获所有的异常,在只想捕获已知的几个异常,然后在这里处理一些特定的业务逻辑。

代码如下:




上面的两种异常的处理逻辑是一致的,重复写了“异常处理” ,是否有办法可以只写一次呢?


解决方案

最简单的方法就是在 catch 作用域中使用 if 语句, 但在 C#6.0 之后就不需要这么麻烦了,可以直接使用新特性 异常过滤器 , 这种特性已经被 CLR 直接支持而不仅仅是 MSIL 上的一些小动作,修改后的代码如下:


上面的代码仅仅会捕获 InvalidDataExceptionArgumentNullException 异常,当然你可以在 when 子句中弄出更复杂的语句,比如下面代码:

值得注意的是:Exception Filters 和 catch 中写 if 有着不同的语义,当第一个 Exception Filters 中的判断条件不满足或者在内部抛出了异常,代码会继续判断下一个 Exception Filters ,参考代码如下:

输出:General catch

如果 Exception Filter 有多个 true,那么只会命中第一个。




编程技巧0001:C# 中如何一次 catch 多个异常?的评论 (共 条)

分享到微博请遵守国家法律