編程技巧0001:C# 中如何一次 catch 多個異常?
在項目開發(fā)中當(dāng)拋出異常時,簡單的用 System.Exception,但這種會捕獲所有的異常,在只想捕獲已知的幾個異常,然后在這里處理一些特定的業(yè)務(wù)邏輯。
代碼如下:

上面的兩種異常的處理邏輯是一致的,重復(fù)寫了“異常處理” ,是否有辦法可以只寫一次呢?
解決方案
最簡單的方法就是在 catch 作用域中使用 if 語句, 但在 C#6.0 之后就不需要這么麻煩了,可以直接使用新特性 異常過濾器 , 這種特性已經(jīng)被 CLR 直接支持而不僅僅是 MSIL 上的一些小動作,修改后的代碼如下:

上面的代碼僅僅會捕獲 InvalidDataException 和 ArgumentNullException 異常,當(dāng)然你可以在 when 子句中弄出更復(fù)雜的語句,比如下面代碼:

值得注意的是:Exception Filters 和 catch 中寫 if 有著不同的語義,當(dāng)?shù)谝粋€ Exception Filters 中的判斷條件不滿足或者在內(nèi)部拋出了異常,代碼會繼續(xù)判斷下一個 Exception Filters ,參考代碼如下:

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

標(biāo)簽: