我刚刚看到一个关于try-catch的问题,人们(包括Jon Skeet)说空的拦截块是一个非常糟糕的主意?为什么这个?没有空的捕获不是错误的设计决定的情况吗?
我的意思是,例如,有时你想从某个地方(网络服务,数据库)获得一些额外的信息,你真的不在乎你是否会收到这些信息.所以你试图得到它,如果有什么事情发生,那没关系,我只会添加一个"catch(Exception ignored){}",这就是全部
哇,我刚从外包开发人员那里拿回了一个C#的大项目,在进行我的代码审查时,我的分析工具揭示了它被认为是坏东西的一堆.其中一个令人沮丧的消息是:
Exceptions.DontSwallowErrorsCatchingNonspecificExceptionsRule : 2106 defects
Run Code Online (Sandbox Code Playgroud)
开发人员向我保证他们有充分的理由使用所有空的catch块,有时候使用空catch块的尝试只是忽略无用的异常并使应用程序不会崩溃.我觉得这是一个警察和完整的BS.我实际查找的一些示例是数据库调用,其中记录被保存到数据库,在这种情况下,如果忽略异常,用户将返回一个正常的提示,认为一切正常,并继续他们的工作.实际上,他们的工作从未得到保存.我认为这绝对是最可怕的错误.在这种情况下,在使用空catch块的try中抛出该代码是完全错误的.但我的问题是,"这种情况在任何情况下都可以接受吗?" 我想不是,但我知道错了.