Мне довольно часто приходится писать похожие обработчики ошибок,
когда в try-catch в блоке catch нужно сделать что то, что может снова привести к ошибке.
я решаю эту проблему неизящно, пример:
private void LoadSettings()
{
string fileName = @"c:\Settings.xml";
bool needDelete = false;
try
{
// Пробуем загрузить настройки из файла, но не уверен, что файл правильный
gc1.MainView.RestoreLayoutFromXml(fileName);
}
catch (Exception ex)
{
// ставим флаг, что онужно грохнуть такой нехороший файл
needDelete = true;
}
if (needDelete)
{
try
{
File.Delete(fileName);
}
catch (Exception ex)
{
}
}
}
Как то это громоздко. Нет ли способа делать это без двух блоков Try-catch и флага?
Спасибо за рекомендации!
Здравствуйте, .beginner, Вы писали: B>Мне довольно часто приходится писать похожие обработчики ошибок, B>когда в try-catch в блоке catch нужно сделать что то, что может снова привести к ошибке. B>я решаю эту проблему неизящно, пример:
B>Как то это громоздко. Нет ли способа делать это без двух блоков Try-catch и флага? B>Спасибо за рекомендации!
А что мешает объединить всё в один блок?
Здравствуйте, .beginner, Вы писали:
B>Как то это громоздко. Нет ли способа делать это без двух блоков Try-catch и флага? B>Спасибо за рекомендации!
Делается так:
Во первых, операции с файлами выносятся в отдельную свою обертку.
Например MyFileUtils.safeDeleteFile(fileName), который не будет кидать такие исключения. В результате это будет написано один раз;
Соответственно это все переписывается в:
private void LoadSettings(string fileName)
{
try
{
// Пробуем загрузить настройки из файла, но не уверен, что файл правильный
gc1.MainView.RestoreLayoutFromXml(fileName);
}
catch (Exception ex)
{
MyFileUtils.safeDeleteFile(fileName)
}
}
Если используется какой нидь Dependency Injection Framework, то это будет не утилитный класс, а сервис. Который можно будет подменить на моки в процессе юнит тестирования.
Теперь из ужасов здесь остается только строка вида gc1.MainView.RestoreLayoutFromXml(fileName), что ахтунг еще тот, но как от этого ужаса избавляться это отдельный разговор.
Re: Обработка ошибки в блоке catch
От:
Аноним
Дата:
05.12.12 05:42
Оценка:
Здравствуйте, .beginner, Вы писали:
B>Мне довольно часто приходится писать похожие обработчики ошибок, B>когда в try-catch в блоке catch нужно сделать что то, что может снова привести к ошибке. B>я решаю эту проблему неизящно, пример:
B>