是否可以捕获异常并且什么都不做?

Dis*_*ive 10 c# coding-style try-catch

try
{

    CallMethod()

}
catch { }
Run Code Online (Sandbox Code Playgroud)

根据我的经验,我通常不会这样做.

但是,如果我有一项功能是说,使用第三方COM组件,它偶尔会失败,它实际上不是很重要,足以记录它,因为我会在几秒钟反正再次调用它,是它没关系做到这一点?

如果没有,我还有什么选择?

STW*_*STW 11

当然有时候,但它们应该是非常罕见的.

在这些情况下,您的最佳做法是在catch块中留下注释,以确保它明确表示它是故意空白的.

  • +1用于在异常块中留下评论,以使人们意识到您故意忽略异常是有原因的。 (2认同)
  • 因为我已经看过几次了,所以理想情况下,它不是一条说“//什么也不做”的评论……说明为什么你应该什么也不做…… (2认同)

小智 7

不应使用如图所示的空挡块.

例如,您的问题中的代码也会捕获OutOfMemoryException,StackOverflowException,ExecutionEngineException,AccessViolationException和ThreadAbortException(尽管后者将在catch块的末尾重新抛出).它甚至会赶上不从System.Exception派生的对象(罕见,但有可能在托管C++和JavaScript ...在CLR,任何对象都可以"扔",但C#限制你到异常派生的类型).

如果在你的榜样,您使用的偶尔失败第三方COM对象,你不关心这些失败,则应该赶上(收到COMException){},让其他更严重的故障"冒泡",并能记录和/或修复.

它只捕获这些异常,你实际上可以做一些事情是很重要的(在这种情况下,你明确选择什么都不做,从CallMethod()产生异常,我同意,应该添加注释,以表明这个设计决定) .通过遵循该指导,您可以防止代码或运行时环境中的其他错误和问题被忽视.