Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找不带';你没有挡块吗?_C#_Vb.net_Try Finally - Fatal编程技术网

C# 如何查找不带';你没有挡块吗?

C# 如何查找不带';你没有挡块吗?,c#,vb.net,try-finally,C#,Vb.net,Try Finally,我有一个大的解决方案,它没有标准的错误处理方法。 最近我发现许多方法已经尝试/最终阻止了。无挡块。 我是如何找到所有类似情况的?try并不一定意味着块会抛出错误。对于懒惰的程序员来说,它有时是语法上的糖分 示例: 假设您希望返回一个值,然后修改该值。您可以这样写: public int Foo () { int old = this.value; this.value = 5; return old; } 但更方便的方法是: public int Foo () {

我有一个大的解决方案,它没有标准的错误处理方法。 最近我发现许多方法已经尝试/最终阻止了。无挡块。
我是如何找到所有类似情况的?

try
并不一定意味着块会抛出错误。对于懒惰的程序员来说,它有时是语法上的糖分

示例

假设您希望
返回一个值,然后修改该值。您可以这样写:

public int Foo () {
    int old = this.value;
    this.value = 5;
    return old;
}
但更方便的方法是:

public int Foo () {
    try {
        return this.value;
    } finally {
        this.value = 5;
    }
}
您可以说第二个实现更长,但一般来说,这不是事实。此外,它还防止显式存储
旧的
值。第二个实现更具可读性,并且更不容易出错,因为它说明了程序员的意图

有人可能会争辩说,这使得
try
关键字比最初可能的意图更加模糊。一个更好的关键字可能更合适



据我所知,没有一种简单的方法可以检查没有捕获块的
try
块。您可以希望
Regex
将找到实例的大部分(例如使用
@“try\d*{[^}]*}\d*finally\d{[^}]*}
,但是如果在
try
finally
块中有一个额外的作用域,那么
Regex
将不会检测到这一点。最简单的方法可能是复制C#/Vb.Net的上下文无关语法,然后在构建
try
/
catch
/
块时进行适当的检查和修改int,以防它不包含
catch
块。

为什么要查找此项的所有匹配项?为什么要搜索“finally”“还不够?搜索
finally
并查看前面是否有
catch
块?使用
Search
并在解决方案级别执行此操作我实际使用
finally
的频率比使用
catch
的频率更高(尽管我使用
的频率比使用
的频率更高):大多数例外情况下,最合适的做法是让它们冒泡——但你仍然需要清理