2016-04-03 10 views
1

例外をスローする関数がいくつかあります。私はそれらをキャッチするコードブロックもスローされますが、IDやノートのような多くのパラメータを持つ例外に基づいて例外をスローします。どうやってやるの?存在する例外の継承例外

いずれかの方が私に方向を与えることができればそれは良いことになります!

おかげで(私の英語のため申し訳ありませんが...)私が欲しいもののために

例(私が知っているが...有効なコードではありません)

catch (Exception e) 
{ 
    LogException l=e; 
    l.Note = "note..."; 
    l.ID = 12; 
    throw l; 
} 
+0

すべてのパラメータを含む「状態」クラスを作成します。その後、クラスを例外ハンドラに渡します。変数 'e'にはクラスを含めることができます。 – jdweng

+0

最初のインスタンスに 'LogException'を投げるだけではどうですか? –

+0

@DarrenYoung例外をスローするのではなく、例外タイプを完全に制御していないため、常に例外をスローするコードではありません –

答えて

1

これを試してください。

try 
{ 
    //....kaboom 
} 
catch (Exception ex) 
{ 
    var newEX= new Exception("custom message", ex); 
    newEX.Data.Add("any key", "any obj"); 
    throw newEX; 
} 
+1

Exceptionを投げるのではなく、独自の例外タイプを作成する必要はありません。また、すべての内部例外を再帰的に処理し、ログに記録されるすべてのメッセージとスタックトレースのかなりのリストをコンパイルする独自のトップレベルハンドラを作成することもできます。 LogExceptionを呼び出すべきではありません。例外名は、問題について何かを伝えるべきであり、それを捕まえるときに何をしたいかについてではありません。 –

2

あなたは(独自の例外を定義する必要がありますExceptionから継承されています)。カスタム例外の基本形式については、こちらを参照してください。 https://msdn.microsoft.com/en-us/library/ms229064(v=vs.100).aspx (ただし、例外をシリアライズ可能にする必要があります)追加のプロパティを追加するだけです。

例外クラス(あなたのケースではLogException)を作成したら、上記のコードが動作します。