奇怪的异常处理伪指令

本文关键字:伪指令 异常处理 | 更新日期: 2023-09-27 17:58:45

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

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

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

  • 它是一个占位符(像//TODO),可以搜索它来知道在哪里需要修复一些东西
  • 这是为了避免编译空catch子句时出现警告

这里面还有其他的用法或意义吗?这是好/坏的编码风格还是实践?由于此指令什么都不做,它会对性能产生一些小影响吗?还是编译器会将其删除?哪些是更好的方法来做类似的事情

奇怪的异常处理伪指令

正如注释所示,代码示例包含一个奇怪的东西和一个糟糕的东西。

0.ToString();

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

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

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

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

有问题的代码是一个吞下异常的例子,这对你的健康有害。