我想要一个从异常中提取信息的中心位置,将我需要的所有信息设置为其消息参数,然后将该信息作为相同类型的异常重新抛出。
更好的解决方案可能是在最终处理异常(并记录其消息)的地方执行此操作,但是..我可以控制抛出异常的地方,而不是接收异常的地方,并且只有记录其消息内容。
除了该设计决策并且鉴于该消息是只读属性,我将(?)以某种方式创建一个新的异常对象,有没有办法使新的异常对象与原始对象的类型相同?
这是我的代码,它无法编译 - 它在抛出线(我尝试动态转换对象)上绊倒。
public static void RethrowExceptionWithFullDetailInMessage(string msg, Exception ex)
{
Exception curEx = ex;
int cnt = 0;
while (curEx != null)
{
msg += "\r\n";
msg += cnt++ + " ex.message: " + curEx.Message + "\r\n";
msg += "Stack: " + curEx.StackTrace;
curEx = curEx.InnerException;
}
object newEx = Convert.ChangeType(new Exception(msg), ex.GetType());
throw (ex.GetType())newEx;
}
做这个
throw (Exception)newEx;
保留类型?(它编译。)
Convert.ChangeType 是否确保我得到正确类型的异常?