滥用尝试/捕获

时间:2018-04-13 17:51:48

标签: c# crash try-catch

有时候我会觉得我在滥用try / catch公式。 也许我只是偏执于良好的编码实践,但我想知道,你会考虑使用try catch来避免边缘崩溃的情况吗?

让我解释一下:假设你有一些随时间变化的东西,而且你知道它会发生分裂为零或超出范围异常的数组。 很多时候,在这种情况下你唯一能做的就是用return;关闭方法。这需要尝试了解异常将在哪些情况下发生,然后在这些情况下返回。

在许多情况下,这可能是一项痛苦的任务,而这时我只是抓住发生的事情并返回。

        if (/* Potentially multiple peinful search for crashing points*/)
            return;

我做

        try
        {
            //I know it's going to crash here sometimes
        }
        catch { return; }

有时这是非常好的,但感觉有点像作弊。 举个例子:我只是用两个TrackBars相互交互来编写一个东西,在某些情况下,如果两个中的一个被带到Min或Max,它会创建一个除零。我很高兴在崩溃前留在ValueChanged事件的用户界面,所以这个解决方案没问题。

您如何看待这个?它被认为是某种可怕的编码事物,还是人们这样做?

3 个答案:

答案 0 :(得分:1)

好吧,try / catch有尝试的想法,如果出现问题,捕获异常。当您捕获异常时,如果您只是隐藏错误,您永远不会知道您的系统有什么好处。

例如:如果你在方法中放置一个try / catch以避免被零除,并且当用户在输入上放零时你有一个验证,如果有一天这个验证停止工作,你永远不会知道什么是幸福的与你的系统。这可能导致未来出现另一个问题,更大,也更昂贵。

所以,我的最大信息是:你可以使用try / catch来获取很多东西,以避免屏幕上出现丑陋的错误,或者系统崩溃,但你必须设法存储异常,如果可能的话,警告你。 我有自定义操作消息并为用户显示,如下所示:

“系统出现错误。请发送一条消息,告知支持代码错误:ER23421”。

我将异常存储在日志文件中,并带有错误代码(这只是文件的索引,以便最容易地找到日志)。

因此,您可以使用try / catch,但不要排除系统异常。

答案 1 :(得分:0)

您基本上使用 try和catch block 来正确处理异常。

换句话说,这是" 正确处理异常"的示例当你发现错误时:

  • 将其记录下来,以便将来增强您的产品,
  • 您通知用户例如发生了错误
  • 提供有意义的消息,如何处理此错误
  • 将用户重定向到其他页面或界面,或继续执行您的计划工作流程。

这只是一个例外,现在如果你正在尝试使用catch块来阻止你的程序崩溃,没有有意义的处理过程,对你的代码没有任何意义,你需要来添加额外的过程。

答案 2 :(得分:0)

  • 当您预期异常时,它会被误用。
  • 当你控制程序流程时,它是误用的。
  • 当您不处理异常时,它就是误用。
  • 如果您不想进行适当的测试,那就是误用。

这里有3/4。不偏执;代码闻起来。