Я хочу, чтобы центральное место извлекало информацию из исключения, устанавливало всю необходимую мне информацию в его параметре сообщения, а затем повторно выдавало эту информацию как исключение того же типа.
Лучшим решением, вероятно, было бы сделать это в том месте, где исключение, наконец, обрабатывается (и его сообщение регистрируется ), но... Я контролирую место, выбрасывающее исключение, а не место, которое получает исключение и регистрирует только содержимое своего сообщения.
Помимо этого дизайнерского решения и учитывая, что сообщение является свойством только для чтения, я бы (? )чтобы каким-то образом создать новый объект-исключение, есть ли способ сделать новый объект-исключение того же типа, что и исходный?
Вот мой код, который не компилируется -, он спотыкается о строку броска (, где я пытаюсь динамически преобразовать объект ).
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 получение исключения правильного типа?