捕获错误的最佳时间C#

Émi*_*mbe -1 c# exception-handling exception

我正在尝试使用最好的异常处理方法,我有点迷失了.

例如,如果我有4个方法(1个调用另一个调用另一个方法......).对于每个方法,可以抛出相同类型的自定义异常.

假设我在第4种方法中引发了错误.我需要在第3个中捕获它还是我可以在第一个中捕获它?

因为如果我尊重需要尽快捕获错误的原则,我应该将catch放在所有的第一种方法中,而不是只放在第一种方法中.

Method1()
{
    Method2();
}

Method2()
{
    Method3();
}

Method3()
{
    Method4(); 
}

Method4()
{
    //Some code that could throw a customException
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 6

我正在尝试使用最好的异常处理方法,我有点迷失了.

编写健壮的软件很难.

如果我尊重错误需要尽快被捕获的原则

这是一个糟糕的原则.什么是可能有什么关系呢?您应该只编写可能代码的原则没有帮助.什么时间有什么关系呢?这是一个重言式,处理异常的正确位置是可以正确处理异常的地方 ; 无论是迟早还是晚些时候.

在哪里可以正确处理异常?这完全取决于(1)异常和(2)您打算如何处理它.这听起来像是非常无益的建议,但你的问题非常模糊!让我们将异常排除在外,只考虑计算.计算的最佳位置在哪里?更早或更晚进行计算是否更好?你怎么可能为所有可能的计算回答这个问题?

我只是想避免在我的所有方法中捕获相同类型的错误,所以我可以在我的大方法中添加一个catch?

好吧,让我们考虑一下.假设为了参数,每个方法处理异常是正确的.在什么情况下将异常处理移出每个被调用者并进入调用者是正确的?这很容易枚举:

  • 处理程序不得依赖于只有被调用者知道的任何状态,而不能依赖于调用者.
  • 处理程序必须在每个被调用者中执行相同的操作.
  • 不得从调用者以外的任何地方调用被调用者.

那是你所处的情况吗?然后可以在不改变语义的情况下将处理程序移动到调用者中,从而减少重复的代码.

我想关闭我的应用程序,因此请记录错误并关闭我的应用程序

然后将处理程序尽可能靠近Main.

或者,处理"我正在卸载appdomain因为我得到了一个未处理的异常"事件并将你的处理逻辑放在那里.

我注意到,如果您的应用程序异常关闭,您无法保证您的日志记录系统不会爆炸,您可能会再次将其炸毁.小心!