@ndbn

Как сделать функцию-обёртку для игнорирования исключений?

Здравствуйте.
Некоторое время назад на глаза попадалась конструкция вида:
void IgnoreException( funcName? )
{
  try{ funcName();  }
  catch(Exception e){}
}

...

IgnoreException(
  () => (
       some code
    )
);

Т.е. нужна функция, которая позволяет обернуть любой делегат или функцию в своё обработчик исключения.
Покажите подобную конструкцию, не понимаю как описать функцию IgnoreException.
Спасибо.
  • Вопрос задан
  • 232 просмотра
Решения вопроса 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
interface ILogger {
    void LogException(Exception ex);
}

...

void IgnoreExceptions<ExType>(Action func, ILogger logger) where ExType : Exception {
    try { 
        func(); 
    }
    catch(ExType ex) {
        logger.LogException(ex);
    }
}
Ответ написан
lexxpavlov
@lexxpavlov
Программист, преподаватель
void IgnoreException(Action funcName)
{
    try{ funcName();  }
    catch(Exception){}
}

void Func()
{
    // код
}

void MyMethod()
{
    IgnoreException(() =>
    {
        Func();
    });

    // Если запустить просто метод без параметров и возвращаемого значения, то можно так:
    IgnoreException(Func);
}


Но согласен с Free_ze. Вместо catch(Exception) лучше делать нужный конкретный тип исключения. Потому как может возникнуть другое исключение, и об этом вы не узнаете.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rare
Рекомендую вам использовать монады. Там есть примерно то, что вы пытаетесь сделать (монада try) + многое другое. Вот первое попавшееся из гугла: https://github.com/louthy/csharp-monad#try-monad
Оно же в виде nuget-пакета: https://www.nuget.org/packages/csharp-monad/
Ответ написан
Если не понятны термины лямбда, делегаты ,Action, Func, то изучите вопрос .
Что за функция, если не секрет , где нужно полностью проигнорировать результат?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы