C# 当它';使用空的挡块合适吗?

C# 当它';使用空的挡块合适吗?,c#,.net,exception-handling,try-catch,catch-block,C#,.net,Exception Handling,Try Catch,Catch Block,可能的重复项: 你知道在什么情况下,空的捕手不是绝对的邪恶吗 try { ... // What and When? ... } catch { } 在这方面有很多问题,试着看看: 根据该帖子的公认答案: 通常,空的try-catch是个坏主意,因为您正在默默地接受错误条件,然后继续执行。偶尔这可能是正确的做法,但通常这是一个迹象,表明开发人员看到了异常,不知道如何处理它,因此使用了一个空捕获来消除问题 这相当于在发动机警示灯上贴上黑色胶带 看一看,它基本上将您可

可能的重复项:

你知道在什么情况下,空的捕手不是绝对的邪恶吗

try
{
    ...
    // What and When?
    ...
}
catch { }

在这方面有很多问题,试着看看:

根据该帖子的公认答案:

通常,空的try-catch是个坏主意,因为您正在默默地接受错误条件,然后继续执行。偶尔这可能是正确的做法,但通常这是一个迹象,表明开发人员看到了异常,不知道如何处理它,因此使用了一个空捕获来消除问题

这相当于在发动机警示灯上贴上黑色胶带


看一看,它基本上将您可能遇到的异常类型分为四类,其中任何一类都不应由空的catch块处理。

我想说,您至少应该提供某种注释或日志消息,指示您在try{}抛出异常,这就是您不做任何操作的原因

我将它用于一些自编库,其中我需要某种类型的
bool TrySomething(out对象)
函数或
object TrySomething()
,其中底层调用不提供任何其他机制作为例外。在这种情况下,我使用一个空catch块并返回
false
null
(取决于函数签名)

证明空catch块的示例 公理:

空的捕手是绝对邪恶的

不要想办法绕过这件事。仅仅是试图找到那些不是绝对邪恶的案例,就意味着你在浪费宝贵的大脑周期。不要试图在这里找到一个模式,想着“嗯,我应该在这里放一个空的捕捉块吗?”


如果您在某人的代码中偶然发现一个空的catch块,那么您就是偶然发现的。修好它。即使只是在一个空的catch块中添加一条日志语句,您也会使这个世界变得更美好。

空的
catch
块总是有害的,除非与空的
try
块一起使用。空的
catch
块并不总是有害的。清空所有的比赛捕捉块总是很邪恶的。@Frédéric Hamidi,你的评论已经被接受为答案了。。。我可以向您展示包含空catch块的完全合理的代码。一个空的catch块并不意味着“什么都不做”。不,一个空的catch块意味着,出了问题,我不知道是什么,但是忽略它,继续。VB 6有一个“On Error Resumed Next”命令,可以自动为您执行此操作,调试带有此命令的代码是一件非常愉快的事情。对于
控件引发的恼人异常,在catch块中应该做些什么。如果控件在方法完成之前被释放,如果调用该方法的唯一原因是让控件知道它应该重新绘制自己?我几乎不认为这样的事情值得记录。可以肯定的是,空catch块确实表示编码缺陷,但缺陷在于缺少
TryBeginInvoke
方法。但在这种情况下,我们是否仍然谈论空catch?在这种情况下,您正在设置一个返回值。@ChristopherLambrechts:添加了一个示例来证明catch块将为空。在这种情况下,我将把
返回值设为false语句。这是一个典型的令人烦恼的异常。有关详细信息,请参阅。
public bool TrySomething(out object destination)
{
    try
    {
        destination = DoSomething();
        return true;
    }
    catch
    {}

    return false;
}