Перехват/изменение (Сообщение )/Rethrow Exception того же типа

Я хочу, чтобы центральное место извлекало информацию из исключения, устанавливало всю необходимую мне информацию в его параметре сообщения, а затем повторно выдавало эту информацию как исключение того же типа.

Лучшим решением, вероятно, было бы сделать это в том месте, где исключение, наконец, обрабатывается (и его сообщение регистрируется ), но... Я контролирую место, выбрасывающее исключение, а не место, которое получает исключение и регистрирует только содержимое своего сообщения.

Помимо этого дизайнерского решения и учитывая, что сообщение является свойством только для чтения, я бы (? )чтобы каким-то образом создать новый объект-исключение, есть ли способ сделать новый объект-исключение того же типа, что и исходный?

Вот мой код, который не компилируется -, он спотыкается о строку броска (, где я пытаюсь динамически преобразовать объект ).

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 получение исключения правильного типа?

7
задан Andreas Reiff 6 August 2012 в 08:20
поделиться