Я использовал условную компиляцию, чтобы позволить мне легко отлаживать (удалив блок catch try) с производственным кодом. Причина, по которой я это делаю, заключается в том, что визуальная студия (очевидно) покажет местоположение исключения, которое было выбрано как блок catch самого верхнего обработчика. Это, к сожалению, не позволяет отлаживать или, по крайней мере, определять точное местоположение ошибки до удаления обработчика.Условная компиляция для catch 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
}
Такой подход вызывает значительное дублирование кода, и я надеюсь найти альтернативу.
Я рассмотрел подход, в котором я бы использовал lambdas для создания настраиваемого обработчика блока catch try, который внутренне использует условную компиляцию для обработки или восстановления такого исключения.
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, так как он впервые вышел, и если я честен, все еще есть ряд вариантов, которые я никогда не расследовал! –