2015-12-04 20 views
2

我們的(相當大)代碼庫有幾個這樣的構造:是否有一個標準的FxCop規則檢測拋出新的異常而不設置InnerException?

try { 
    DoSomething(); 
} 
catch (Exception e) { 
    CleanUp(); 
    throw new MoreSpecificException(); 
} 

而且我想,以確保我們在大多數情況下拋出一個新異常的InnerException集。

是否有一個標準的FxCop規則檢測拋出新的異常而不設置InnerException?我的研究(谷歌搜索)表明沒有這樣的規則存在。

如果不是,如何創建這樣的規則? (我從來沒有創建過自定義的FxCop規則)。

我也看過Gendarme tool,但找不到像我需要的東西。

FxCop規則由SonarQube,BTW運行。

回答

1

是的,這是可能的FxCop。創建自定義規則的指南可以是http://www.binarycoder.net/fxcop/index.html

FWIW,我建議創建一個「不要吃異常」的規則來代替,並且拋出一個新的例外與原始的內部異常作爲規則認可的「不吃東西」模式之一。這比「每個拋出的異常必須有一個內部的異常規則」更爲普遍有用,並且避免了後一個規則可能出現的大量誤報。

+0

我在想的規則是「catch塊中的每個拋出的異常都必須有一個內部異常」 – codeape

+0

這不能確保內部異常實際上是你想要的。即拋出new MoreSpecificException(new WhateverException())'可能會滿足規則,但最初的異常仍然會丟失。 –

+0

是的,但我懷疑代碼庫中的大多數情況都沒有設置任何內聯。 – codeape

相關問題