C#:找到所有空的catch块

时间:2009-09-28 10:49:29

标签: c# visual-studio

我正在审核一些代码。

我注意到一些空的catch块。不是一个好主意,因为有些东西不起作用,你不明白为什么。

是否有一种简单的方法可以在解决方案中找到所有空的try catch块?

9 个答案:

答案 0 :(得分:24)

使用全局查找对话框,打开正则表达式,然后搜索:

catch:b*\([^)]*\):b*\{:b*\}

答案 1 :(得分:9)

扩展已接受的答案以满足下述所有条件。 针对Visual Studio 2017/2019进行了更新,适用于C#和C ++。

使用查找对话框(CTRL + SHIFT + F),启用正则表达式并搜索:

^(?!\/\/|\/\*).*catch\s*(?:\([^)]*\))*\s*\{\s*(?:(?:\/\/|\/\*).*(\*\/)?\s*)*\}

<强>匹配

catch {}
catch{}
catch{
}
catch 
{}
catch () {}
catch (...) {}
catch (int x) {}
catch (Exception x) {}
catch (Exception ex){
}
catch(...){
}
} catch (...){
/**/
}
} catch (...){
/**/
///
}
} catch (...){
//
//
/**/
}
catch (...)
{}
catch(...) { //single line
}
catch(...) { 
//single line}
catch(...) { 
//single line
}
catch(...) { /*multiline*/
}
catch(...) {
 /*multiline*/}
catch(...) {
 /*multiline*/
}
catch (...){ // int i = 0; }

不匹配:

// catch () {}
/* catch () {} */
catch (...){ int i = 0;}
catch (...){ 
int i = 0;}
catch (...){int i = 0;
}
catch (...){ 
// Comment
int i = 0;}
catch (...){ int i = 0; // Comment}

答案 2 :(得分:7)

FxCop会发现它们以及许多其他潜在问题。

答案 3 :(得分:6)

你有ReSharper吗?这应该突出代码中的问题。

答案 4 :(得分:2)

这是一个正则表达式,它也可以找到仅包含注释的catch块:

catch:b*\([^)]*\)[:b\n]*\{([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\}

答案 5 :(得分:2)

感谢Stefan提出的正则建议。我发现建议的正则表达式没有找到未指定异常的catch块,即:

catch { }

我稍微调整了Stefan,以使异常支撑可选:

catch:b*(\([^)]*\))*:b*\{:b*\}

答案 6 :(得分:1)

按Ctrl + Shift + F. 展开查找选项。 选中“使用正则表达式” 粘贴此正则表达式。

catch\s*(\(\s*Exception(\s*\w+)?\))?\s*\{\s*\}

答案 7 :(得分:0)

扩展@ bobah75的答案,它将无法识别此行

catch (System.Data.Entity.Core.EntityException ex)
{
}

为了解决这个问题,这是解决方案

catch\s*(\(?.+Exception(\s*\w+)?\))?\s*\{\s*([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\}

您可以here进行测试

答案 8 :(得分:0)

如果可以的话,我建议使用Sonar Analyzer。您可以通过Visual Studio中的NuGet管理器添加它。

它将显示所有未使用的捕获块,并向您显示如何处理它的提示,例如:“实施或注释为什么为空。”

此外,它将向您显示更多可能的代码问题。