我正在审核一些代码。
我发现了一些空的 catch 块。这不是一个好主意,因为有时候程序无法工作,你也无法知道原因。
是否有一种简单的方法可以找到解决方案中所有空的 try catch 块?
我正在审核一些代码。
我发现了一些空的 catch 块。这不是一个好主意,因为有时候程序无法工作,你也无法知道原因。
是否有一种简单的方法可以找到解决方案中所有空的 try catch 块?
使用全局查找对话框,打开正则表达式并搜索:
catch:b*\([^)]*\):b*\{:b*\}
:b
替换为 \s
。(VS 2017) - Marcel扩展了接受的答案以满足下面描述的所有条件。 更新适用于 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}
你有ReSharper吗?它可以突出显示代码中发现的问题。
catch:b*\([^)]*\)[:b\n]*\{([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\}
感谢Stefan提供的正则表达式建议。我发现建议的正则表达式无法找到没有指定异常的catch块,例如:
catch { }
我稍微修改了Stefan的代码,使异常括号可选:
catch:b*(\([^)]*\))*:b*\{:b*\}
按下Ctrl + Shift + F。 展开查找选项。 勾选使用正则表达式 粘贴此正则表达式。
catch\s*(\(\s*Exception(\s*\w+)?\))?\s*\{\s*\}
catch (System.Data.Entity.Core.EntityException ex)
{
}
catch\s*(\(?.+Exception(\s*\w+)?\))?\s*\{\s*([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\}
catch\s*((?.+Exception(\s*\w+)?))?\s*{\s*([:b\n]|(/*[^]*/)|(//[^\n]))}
Visual Studio 2022。只有这个表达式实际上是有效的。