我正在审核一些代码。
我注意到一些空的catch块。不是一个好主意,因为有些东西不起作用,你不明白为什么。
是否有一种简单的方法可以在解决方案中找到所有空的try catch块?
答案 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管理器添加它。
它将显示所有未使用的捕获块,并向您显示如何处理它的提示,例如:“实施或注释为什么为空。”
此外,它将向您显示更多可能的代码问题。