プロダクションコードで(try catchブロックを削除して)簡単にデバッグできるようにする方法として、条件付きコンパイルを使用しています。私がこれを行う理由は、Visual Studioが(明らかに)スローされた例外の場所を最上位のハンドラーのキャッチブロックとして表示するためです。残念ながら、これにより、ハンドラーを削除するまで、デバッグや少なくともエラーの正確な場所の特定ができなくなります。
これが私の現在のアプローチの例です
private void btnConnect_Click(object sender, EventArgs e)
{
#if DEBUG
DoSomething();
#else
try
{
DoSomething();
}
catch (Exception ex)
{
Logger.Log(ex);
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
CleanUp();
}
#endif
}
このアプローチはコードの大幅な重複を引き起こし、私は代替案を見つけたいと思っています。
ラムダを使用して、条件付きコンパイルを内部的に使用してこのような例外を処理または再スローするカスタムtrycatchブロックハンドラーを作成するアプローチを検討しました。
void TryCatchFinally(Action tryBlock, Action<Exception> catchBlock, Action finallyBlock)
{
#if DEBUG
tryBlock.Invoke();
finallyBlock.Invoke();
#else
try
{
tryBlock.Invoke();
}
catch (Exception ex)
{
catchBlock.Invoke(ex);
}
finally
{
finallyBlock.Invoke();
}
#endif
}
しかし、私は標準のtry catch構文を維持したいと思います(さらに、このアプローチは、大きな変更なしに既存のコードに適用できないことを意味します)
誰かがこの問題への良いアプローチを見つけましたか、または誰かが私のバージョンの改善を考えることができますか?