我有一个很大的解决方案,没有标准的错误处理方法。 最近我发现了许多尝试/最终阻止的方法。没有阻挡。 我怎么发现这样的事情?
答案 0 :(得分:2)
try
并不一定意味着该块可以抛出错误。对于懒惰的程序员来说,它有时是语法糖。
示例强>:
假设您希望return
一个值,然后修改该值。你可以这样写:
public int Foo () {
int old = this.value;
this.value = 5;
return old;
}
但更方便的方法是:
public int Foo () {
try {
return this.value;
} finally {
this.value = 5;
}
}
你可以说第二次实施更长,但总的来说,情况并非如此。此外,它可以防止显式存储old
值。第二个实现更具可读性,并且不易出错,因为它说明了程序员的意图。
有人可能会说这会使try
关键字比起初可能的含义更加模糊。更好的关键字可能更合适...
据我所知,没有简单的方法来检查没有try
块的catch
块。您可以希望Regex
找到最的实例(例如使用@"try\d*{[^}]*}\d*finally\d{[^}]*}
,但请说try
或{{1}中还有其他范围阻止,然后finally
将无法检测到这一点。最简单的可能是复制C#/ Vb.Net的无上下文语法,然后构建Regex
/ try
/ catch
块执行正确的检查并打印,以防它不包含finally
块。