Jor*_*oba 28 .net c# exception-handling
我们正在努力使用策略来正确处理应用程序中的异常.这是我们的目标(总结):
我们已经提出了一个涉及通用特定于应用程序特定异常的解决方案,并且在一段代码中就是这样的:
try {
// Do whatever
}
catch(ArgumentNullException ane)
{
// Handle, optinally log and continue
}
catch(AppSpecificException)
{
// Rethrow, don't log, don't do anything else
throw;
}
catch(Exception e)
{
// Log, encapsulate (so that it won't be logged again) and throw
Logger.Log("Really bad thing", e.Message, e);
throw new AppSpecificException(e)
}
Run Code Online (Sandbox Code Playgroud)
记录所有异常,然后转为AppSpecificException,以便不再记录它.最终它将到达最后的手段事件处理程序,如果必须,将处理它.
我对异常处理模式没有太多经验......这是解决我们目标的好方法吗?它有任何重大缺点或大红色警告吗?
注意:这样做的一个缺点是,在第一次捕获之后你将失去处理特定异常的能力(如果你调用一个调用另一个方法的方法而第二个抛出异常则你无法处理它)但是我发现我从来没有这样做过......我只处理一个深度的例外...
Joh*_*ers 60
如果您在异常第一次抛出异常时记录异常,则不会记录完整的堆栈跟踪.
处理异常(即修复它们),尽可能接近它们被抛出的时间.尽快收集有关上下文的信息.但允许异常传播到实际可以处理的位置.日志记录是最后一种处理方式,因此应该在应用程序子系统的外层中进行.
这样就不需要使用特定于应用程序的异常作为标记来记录不应该开始捕获的异常.