例外から情報を抽出し、必要なすべての情報をメッセージ パラメータに設定し、その情報を同じタイプの例外として再スローするための中心的な場所が必要です。
より良い解決策は、おそらく、例外が最終的に処理される場所 (およびそのメッセージがログに記録される場所) でこれを行うことですが、例外を受け取る場所ではなく、例外をスローする場所を制御できます。メッセージの内容をログに記録します。
その設計上の決定とは別に、メッセージが読み取り専用プロパティであることを考えると、何らかの方法で新しい Exception オブジェクトを作成する必要があります (?)。新しい例外オブジェクトを元のオブジェクトと同じタイプにする方法はありますか?
これはコンパイルされない私のコードです-それはthrow行(オブジェクトを動的にキャストしようとする場所)につまずきます。
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 は、正しいタイプの例外を確実に取得しますか?