2013-02-12 41 views
7

在我的工作中,我必须维护一些C#项目。原来的开发人员不在身边了。最近我注意到一些奇怪的代码主要发现在这种情况下:奇怪异常处理伪指令

try 
{ 
    //some Code 
} 
catch 
{ 
    0.ToString(); 
} 

什么是0.ToString()?大部分代码是在压力下编写的,所以我能想到的两种可能性:

  • 它(如//TODO),为此,可以搜索到知道你有没有修复一些东西的占位符。
  • 这是为了避免在编译空的catch子句时发出警告。

是否有任何其他用例或意义?这是好的/坏的编码风格还是练习?由于这个指令什么都不做,它会对性能产生一些小的影响,或者编译器会删除它吗?哪个更好的方式来做类似

+7

唯一合乎逻辑的原因是在那里有一些代码,所以你可以为抛出的异常设置一个断点,尽管这不是一个好办法; p – leppie 2013-02-12 14:41:44

+0

我猜O是' null'值,并有'NullReferenceException'的断点 – 2013-02-12 14:44:23

+0

原始程序员的声音应该已经写了一些测试...该调试断点持有人也扼杀了任何例外...... – 2013-02-12 14:44:45

回答

2

正如评论所示,代码示例包含一件奇怪的事情和一件坏事。

0.ToString(); 

几乎肯定是这样,有一行代码,调试器可以放置一个断点。这是我见过的用于此目的的陌生人之一。调试会话之后,这行很可能是无意中提交的。

分开的是空的catch块,这通常不是一个好主意。瑞安盖茨给出了一个很好的答案,所以我不打算在这一点上扩大。但具有讽刺意味的是,如果有一个合适的catch块,就会有一行代码放置一个断点。

1

不,没有另一个用例或理由这样做。这是一种糟糕的编码习惯。你的代码不应该捕获它无法处理的任何异常。

最好的路径是将其删除。当引发异常时,您需要了解该用例。然后才可以添加适当的检查和/或特定的异常处理代码。

有问题的代码是swallowing the exception, which is hazardous to your health的示例。