私は実動コードで簡単に(try catchブロックを削除して)デバッグできるように条件付きコンパイルを使用しています。私がこれを行うのは、Visual Studioが(明らかに)スローされた例外の位置を最上位のハンドラのキャッチブロックとして表示するためです。これは残念なことに、デバッグを防止するか、ハンドラを削除するまでエラーの正確な場所を特定します。ここでtry catchの条件付きコンパイル
が
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
}
私の現在のアプローチの一例である。このアプローチでは、コードの大幅な重複が発生し、私が代わりを見つけることを期待しています。
私はlambdaを使用して、内部で条件付きコンパイルを使用してこのような例外を処理または再現するカスタムtry catchブロックハンドラを作成する方法を検討しました。
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
}
しかし、私は、標準のトライキャッチ構文を保つことを好むだろう(プラスこのアプローチは、私は大きな変更を加えることなく、既存のコードにそれを適用することができなかったことを意味する)
誰もがこれまで良い方法を発見しました誰かが私のバージョンの改善について考えることができますか?
男の子私は愚かだと感じますか?いいえ、私はしませんでした.... –
ちょっと - それは起こる:)私はそれが最初に出て以来、私が正直であるなら、私はまだ調査したことがない多くのオプションがありますVSを使用してきた! –