是否有适合使用空挡块的情况?
可能重复:
为什么空捕获阻止了一个坏主意?
是否有任何有效理由忽略捕获的exception
你知道任何情况下空的挡块不是绝对的邪恶吗?
try { ... // What and When? ... } catch { }
关于此问题有很多问题,请试着看看:
为什么空捕获阻止了一个坏主意?
从该post的接受答案:
通常空的try-catch是个坏主意,因为你正在静默地吞下错误条件然后继续执行。 有时这可能是正确的做法,但通常这表明开发人员看到了exception,不知道该怎么做,因此使用空捕获来解决问题。
它的编程相当于将黑色胶带放在发动机警告灯上。
看看这个 ,它基本上将你可能遇到的exception分解为四个类别,其中没有一个应该由空的catch块处理。
我会说你至少应该提供某种评论或记录消息,表明你在try {}中放入的内容引发了exception,这就是你没有做任何事情的原因。
公理:
空抓块绝对是邪恶的
不要试图找到解决方法。 只是试图找到他们不是绝对邪恶的案例意味着你在浪费宝贵的大脑周期。 不要试图在这里找到一个模式,想“嗯,我应该把空挡块放在这里吗?”
如果你在某人的代码中偶然发现一个空洞,你只是偶然发现了技术债务 。 修理它。 即使只是在一个空的catch块中添加一个日志语句,你也会让这个世界变得更加美好。
我用它bool TrySomething(out object)
一些自编的库,我需要某种bool TrySomething(out object)
函数或object TrySomething()
,其中底层调用不提供任何其他机制作为exception。 在这种情况下,我使用一个空的catch块并返回false
或null
(取决于函数签名)。
certificate空捕获块的示例
public bool TrySomething(out object destination) { try { destination = DoSomething(); return true; } catch {} return false; }