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
的频率更高(尽管我使用的频率比使用的频率更高):大多数例外情况下,最合适的做法是让它们冒泡——但你仍然需要清理