如何查找没有catch块的try块?

时间:2014-09-22 18:38:22

标签: c# vb.net try-finally

我有一个很大的解决方案,没有标准的错误处理方法。 最近我发现了许多尝试/最终阻止的方法。没有阻挡。 我怎么发现这样的事情?

1 个答案:

答案 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块。