private void ProcessData(IProcessor processor)
{
Data data = new Data();
try
{
processor.Process(data);
}
catch(Exception e)
{
CustomCode(e);
}
}
コンクリートIProcessor processor.Process
メソッドの実装:キャッチ例外を複数回 - C#
public void Process(Data data)
{
try
{
Thing a = null;
a.MakeSomething();
}
catch(NullPointerException e)
{
DoSomething();
}
}
私はProcessData()
方法やその「試す」ブロック (すべての両方で表示されるすべての例外のCustomCode()
方法を実行したいと思います呼び出しスタック内のProcessData()
から例外をスローするスタックの最後までのコードは、複数の例外ハンドラで処理する必要があります。この例では、DoSomething()
とCustomCode()
の両方を実行する必要があります)。 これをどうすれば実現できますか?私は "スロー"を加えることができることを知っている。 "DoSomething();
"の後に置かれますが、これは、プロセッサのすべての実装におけるすべてのプログラマが、常に "throw;" catch(...)に があり、CustomCode(e)
を実行できるようになりました。どういうわけかもっとうまくいくことができますか?私は@Seabizkitコメントに同意
例外に関係なく常にcustomerCodeを実行するには、設計上の欠陥があります。なぜtry catchをprocess()から削除し、processdata()がそれを処理するのをやめてください。例外が処理された場合は、処理するものを選択する必要があります。 – Seabizkit
あなたは* NullReferenceExceptionをキャッチすべきではありません(NPEはjavaです、または独自の例外クラスを持っていますか?)*避けてください。したがって、例外についても*ケア*する必要は全くありません。 – HimBromBeere
Seabizkit別のIPプロセッサの実装があります。そのうちの1つでは、トランザクションをデータベースにコミットします。このトランザクションをコミットした後に例外が発生した場合は、このトランザクションをロールバックします。 各IProcessor実装には、Process(Dataデータ)の処理内容に応じて、別の例外処理コードが必要です。 – Zygmuntix