PriorException未被用户代码处理

时间:2010-06-22 19:20:54

标签: c#

我有多个使用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连接好了。那是怎么回事?

2 个答案:

答案 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);}

然后继续使用您的程序