我有多个使用try / catch块的嵌套方法。如果有任何异常,我想记录第一个,并通过嵌套方法使控制流向上冒泡。我尝试通过引发一个名为PriorException的自定义异常来实现这一点......
public class PriorException : ApplicationException
{
public PriorException() : base() { }
public PriorException(string message) : base(message) { }
}
...并像这样编写catch块:
try
{
(do stuff here)
}
catch (Exception ex)
{
MyLog.ExceptionError(ex);
if (ex is PriorException) { throw; } else { throw new PriorException(); }
}
(MyLog忽略PriorException,最外面的catch块不会重新抛出。)
然而,发生的事情是,当遇到异常时,会捕获,记录并抛出PriorException。然后控制落到调用方法,其中捕获并重新抛出PriorException。但是然后控制移动到catch块的else子句的开括号,程序崩溃,“PriorException未被用户代码处理”。
我仍然在一个或多个嵌套的try / catch块中,它们应该捕获这个异常,而且我已经将AppDomain.CurrentDomain.UnhandledException连接好了。那是怎么回事?
答案 0 :(得分:1)
听起来你正在调试。运行时行为是否符合预期?
旁注:我强烈建议您尝试重构代码,以便没有用于程序流的嵌套try / catch块。随着应用程序的进展,维护可能变得非常棘手。
答案 1 :(得分:0)
因为你正在做
try
{
(do stuff here)
}
catch (Exception ex)
{
MyLog.ExceptionError(ex);
if (ex is PriorException) { throw; } else { throw new PriorException(); }
}
你需要添加
catch (PriorException ex)
{
}
现在你唯一能抓住的一般例外情况。
编辑刚刚意识到这是不正确的
异常会捕获Prior异常。
在处理异常后需要重新抛出异常。
您说在处理异常并将其转换为ProperException
类型后,异常永远不会触及。为什么不直接说
catch {MyLog.ExceptionError(ex);}
然后继续使用您的程序