我有一个没有标准错误处理方法的大型解决方案。最近我发现很多方法都有 try/finally 阻塞。没有捕获块。我是如何发现所有这样的事情的?
问问题
70 次
1 回答
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
块。您可以希望 aRegex
会找到大部分实例(例如使用,但说or块@"try\d*{[^}]*}\d*finally\d{[^}]*}
中有一个额外的范围,那么将不会检测到这一点。最简单的可能是复制 C#/Vb.Net 的上下文无关语法然后在构建//块时进行适当的检查并打印以防它不包含块。try
finally
Regex
try
catch
finally
catch
于 2014-09-22T18:59:02.113 回答