C#:找到所有空的catch块

我正在审查一些代码。

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

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

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

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

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

你有ReSharper吗? 这应该是代码中发现的问题。

进一步扩展了上面的三个解决方案以包括子句,其中大括号与catch不在同一行,catch子句只包含单行引号:

 catch:b*(\([^)]*\))*:b*[ \n\r\t]*\{:b*([ \n\r\t.]|(\/*[^]*\/)|(//.*$))*\} 

感谢Stefan对Regex的建议。 我发现建议的正则表达式没有找到未指定exception的catch块,即:

 catch { } 

我稍微调整了Stefan,以使exception括号可选:

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

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

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

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

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