MSVS C#删除try-catch块的最快方法?

时间:2011-03-21 12:53:49

标签: try-catch

我接手了一个不完整的项目,令我完全不相信,每个函数都用相同格式的try-catch语句包装:

try
{
   // work work.
}
catch(Exception ex)
{
   MessageBox.Show(ex.Message, ...);
}

当我搜索SO以寻找快速删除所有这些try-catch块的方法时,我发现人们实际上正在寻找使用try-catch自动包装其函数的方法!嗯...这是一个很好的编程习惯吗?是否有方法删除所有块,以便它使调试更容易,并允许我真正解决异常?

5 个答案:

答案 0 :(得分:9)

您可以在此处更改选项:

Debug -> Exceptions -> CLR Exceptions -> Check the "Thrown" checkbox.

在检查任何catch块之前,这会导致编译器在抛出异常时中断。

答案 1 :(得分:2)

这是一种可怕的编程习惯。我曾经把这看作是一个混乱某人数据库的错误。

我坚定地认为,你最好让你的程序死于火热的死亡,而不是在一个未知的状态下盲目继续。

我会在MessageBox.Show(ex上使用throw //MessageBox.Show(ex进行查找和替换,并将其全部替换掉​​。你必须手动找到真正存在的那些并将它们放回去。

答案 2 :(得分:2)

Visual Studio的正则表达式搜索功能非常强大,但使用起来有点棘手,以下是您在搜索上述代码时可能会发现的有用信息:(请在“查找”对话框的“选项”部分中选择“使用” :正则表达式“)

会发现你的不良信息:

  

捉* \ N +:B + {[.: b \ n]的的MessageBox [:b \ n]的*}

如果你想用投掷直接替换:

  

捉\ N {\ nthrow; \ N}

答案 3 :(得分:0)

我已经为VB.NET找到了解决方法。

替换它:

\s(?<!End )Try((.|\r\n)+?)Catch(.|\r\n)+?(Finally((.|\r\n)+?)End Try|End Try)

......用这个:

$1$5

它将删除整个try / catch块,同时只留下try和finally块中的内容。但是,它不适用于嵌套的try / catches,因此您需要先替换嵌套块,然后再将外部块替换掉。

答案 4 :(得分:0)

快速而肮脏的把戏:

  1. 搜索并替换尝试-> if(true)//已尝试
  2. 搜索并替换catch§-> if(true)// WAS CATCH§

§是正则表达式的占位符,用于匹配所捕获的内容并将其放在注释WAS CATCH之后

通过这种方式,您可以:

  • 恢复搜索“尝试”和“ WATCH”§
  • 确定在rhe搜索期间什么时候必须替换什么,什么不需要

在调试会话期间,我经常用// DUMMY注释每个临时的捕获。

(由于这是一篇非常老的文章,我并没有花所有时间来编写正则表达式等...请耐心等待)