我想防止引用的库引发的所有异常从我的库中转义。我通过 try catch 过滤所有函数来做到这一点,如果它们不是MyException
类型,它会包装异常。我遇到的问题是,在我的 wrap 函数中,如果异常是MyException
类型,我最终会丢失原始堆栈跟踪,因为我最终会从新位置重新抛出相同的异常,并且不会嵌入最初抛出的异常,由于堆栈跟踪是从重新抛出异常的新位置记录的,因此原始堆栈跟踪throw
会丢失。
public static Exception Wrap(Exception exception)
{
Exception exceptionToReturn;
if (exception is MyException)
{
exceptionToReturn = exception;
}
else
{
exceptionToReturn = new MyException("Referenced library exception wrapped", exception);
}
return exception;
}
我想要做的是重新抛出与MyException
保留原始堆栈跟踪相同类型的异常。但是我不想使用以下MyException
代码检查每个孩子:
(exception is ChildOfMyException)
exceptionToReturn = new ChildOfMyException(exception.Message, exception);
如果我使用泛型。我无法指定显式构造函数。
public static Exception Wrap<TException>(TException exception)
where TException : Exception, new()
{
Exception exc;
if (exception is MyException)
{
exc = new TException();
}
else
{
exc = new MyException("Referenced library exception wrapped", exception);
}
return exc;
}
是否有某种我遗漏的方法,或者我必须使用反射来修改 _innerException
字段。