Dis*_*ive 10 c# coding-style try-catch
try
{
CallMethod()
}
catch { }
Run Code Online (Sandbox Code Playgroud)
根据我的经验,我通常不会这样做.
但是,如果我有一项功能是说,使用第三方COM组件,它偶尔会失败,它实际上不是很重要,足以记录它,因为我会在几秒钟反正再次调用它,是它没关系做到这一点?
如果没有,我还有什么选择?
STW*_*STW 11
当然有时候,但它们应该是非常罕见的.
在这些情况下,您的最佳做法是在catch块中留下注释,以确保它明确表示它是故意空白的.
小智 7
不应使用如图所示的空挡块.
例如,您的问题中的代码也会捕获OutOfMemoryException,StackOverflowException,ExecutionEngineException,AccessViolationException和ThreadAbortException(尽管后者将在catch块的末尾重新抛出).它甚至会赶上不从System.Exception派生的对象(罕见,但有可能在托管C++和JavaScript ...在CLR,任何对象都可以"扔",但C#限制你到异常派生的类型).
如果在你的榜样,您使用的偶尔失败第三方COM对象,你不关心这些失败,则应该赶上(收到COMException){},让其他更严重的故障"冒泡",并能记录和/或修复.
它只捕获这些异常,你实际上可以做一些事情是很重要的(在这种情况下,你明确选择什么都不做,从CallMethod()产生异常,我同意,应该添加注释,以表明这个设计决定) .通过遵循该指导,您可以防止代码或运行时环境中的其他错误和问题被忽视.