c# – 在Silverlight中重新抛出异常时保留堆栈跟踪

我需要重新抛出一个被捕获并存储在其他地方的异常,而不会丢失有关何时首次捕获/存储异常的堆栈跟踪信息.我的代码看起来像这样:

    public void Test()
    {
        int someParameter = 12;
        ExecuteSomeAsyncMethod(someParameter, CallbackMethod);   
    }

    public void CallbackMethod(object result, Exception error)
    {
        //Check for exceptions that were previously caught and passed to us
        if(error != null)
            //Throwing like this will lose the stack trace already in Exception
            //We'd like to be able to rethrow it without overwriting the stack trace
            throw error;

        //Success case: Process 'result'...etc...
    }

我已经看到了使用反射(例如herehere)或使用序列化(例如here)的这个问题的解决方案,但是这些都不适用于Silverlight(不允许私有反射,并且使用的是类/方法) Silverlight中不存在序列化方法).

有没有办法保留在Silverlight中工作的堆栈跟踪?

最佳答案
抛出一个新异常,异常作为内部异常:

throw new ApplcationException("Error message", error);

内部异常将保持其堆栈跟踪.

转载注明原文:c# – 在Silverlight中重新抛出异常时保留堆栈跟踪 - 代码日志