有没有可能捕获到异常什么都不做?try{CallMethod()}catch{}根据我的经验,我通常不会这样做。但是,如果我有一个函数,比如说,使用偶尔会失败的第三方COM组件,那么它就不够重要,因为我会在几秒钟内再次调用它,是否可以这样做?如果没有,我有什么选择?不应使用如图所示的空白块。例如,您问题中的代码还会捕获OutOfMemoryException、StackOverflowException、ExecutionEngineException、AccessViolationException和ThreadAbortException(尽管后者将在catch块的末尾重新抛出)。它甚至会捕获不是从System.Exception派生的对象(很少见,但在托管C++和JavaScript中可能......在CLR中,任何对象都可以“抛出”,但C#将您限制为Exception派生类型)。在您的示例中,如果您使用的是偶尔失败的3rd方COM对象并且您不关心这些失败,您应该捕获(COMException){}以便其他更严重的失败“冒泡”并且可以被记录下来并且/或修复。重要的是只捕获那些你实际可以做的事情(在这种情况下,你明确选择不做任何事情,除了CallMethod()引发的异常,我同意应该添加一条评论来表明这个设计决定).通过遵循此指南,您可以防止代码或运行时环境中的其他错误和问题被忽视。当然有时,但他们应该是非常罕见的。在这些情况下,您的最佳做法是在catch块中留下注释,以确保它清楚地表明它是有意留空的。通常,您希望将代码设计为以某种方式处理错误。也就是说,如果你愿意默默地处理失败的后果,那就继续吧。我至少会在catch块中以“警告”级别或更低级别记录事件,这样您就可以始终启用日志记录,并在需要时查看发生了什么。您的第三方组件失败。怎么会失败呢?它是否以一致且可预测(尽管时间不稳定)的方式失败?你得到TakingABreakException了吗?如果是这样,捕获可预测的异常,用它做所有事情,记录它,等等,让其他一切都冒出来。如果你能抓住不时发生在你身上的事情,不要抓住一切。现在可能损坏的可能不是第3方组件,或者它可能由于您使用的输入而表现不佳。这些东西不应该被吞噬。我相信捕获异常总是一个好主意,特别是如果您知道它是什么,最特殊的异常。我遇到了无数从未被捕获的错误,因为代码直接通过捕获,因为它留空或有人返回那里。以上就是C#学习教程:是否可以捕获异常什么都不做?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
