奇怪的异常处理虚拟指令

时间:2013-02-12 14:40:34

标签: c# exception-handling

在我的工作中,我必须维护一些C#项目。最初的开发人员不在了。最近我注意到一些奇怪的代码主要出现在这样的情况中:

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

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

  • 这是一个占位符(如//TODO),可以搜索它以了解您需要在哪里修复一些内容。
  • 在编译空catch子句时要避免警告。

还有其他用例或意义吗?这是好/坏编码风格还是练习?由于该指令不执行任何操作,它是否会对性能产生一些小的影响,或者编译器会将其删除吗?哪种方式更适合做

2 个答案:

答案 0 :(得分:2)

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

0.ToString();

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

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

答案 1 :(得分:1)

没有其他用例或明智的理由这样做。这是一个糟糕的编码实践。您的代码不应该捕获它无法处理的任何异常。

前进的最佳方法是将其删除。抛出异常时,您需要了解该用例。然后,只有这样才能添加适当的检查和/或特定的异常处理代码。

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