Является ли использование лямбда-выражения для try без улова плохой практикой? - PullRequest
1 голос
/ 06 сентября 2010

У меня есть много частей в коде, где я делаю

try
{
    // not so important code, but don't want this to affect anything else
}

catch
{
}

Считается ли использование этого плохим занятием?

Try(() => 
{
});

void Try(Action a)
{
    try
    {
        a();
    }
    catch
    {
        // ignore.
    }
}

Ответы [ 5 ]

5 голосов
/ 06 сентября 2010

Конечно, вы всегда можете добавить обработчик исключений:

void Try(Action a, Action<Exception> onErr)
{
    try
    {
        a();
    }
    catch (Exception e)
    {
        onErr(e);
    }
}

Тогда у вас будет:

Try( 
    ()=> { /* do something */ }
    e => { } );

У вас может быть стандартный пустой рычаг

static void IgnoreError(Exception e) 
{
    #if DEBUG
    throw e;
    #end if
}

Try( 
    ()=> { /* do something */ }
    IgnoreError );

Я не думаю, что это плохо как таковое, но это очень нестандартно - ваш код будет сбивать с толку, и я не думаю, что он что-то добавляет. Интересно рассмотреть, но я думаю, что ваш код будет очень запутанным.

Кроме того, хотя существуют обстоятельства, когда вы можете игнорировать исключение, на самом деле вы не хотите упрощать это регулярно.

3 голосов
/ 06 сентября 2010

Проглатывание исключений обычно считается плохой практикой, поскольку затрудняет обслуживание программы.

Однако перемещение всей обработки исключений в центральное место может быть шагом в правильном направлении, поскольку позволяетпо крайней мере, регистрируйте исключения в будущем, не просматривая всю кодовую базу.
Пока это ограничено местами, где вас действительно не волнуют исключения, это может быть положительным изменением.

3 голосов
/ 06 сентября 2010

Если вы действительно не заботитесь о том, что делает «неважный» код, тогда я бы сказал, что все в порядке.Использование лямбды делает ее более читабельной, но она также может скрыть тот факт, что вы «проглатываете» исключение.Лично мне нравится оставлять это там, так что это явно и помещает комментарий в пустой блок catch, объясняя, почему можно игнорировать любые ошибки.Конечно, комментарий специфичен для каждой ситуации.

0 голосов
/ 06 сентября 2010

Как стандартная пустая ловушка, так и использование лямбды для одинаковых действий - плохая практика. смотри этот вопрос . В этом руководстве статья довольно четко говорится, почему

Перехват исключений, которые вы не можете законно обрабатывать скрывает критическое отладочная информация.

0 голосов
/ 06 сентября 2010

void Try (Action a) довольно неясен, другой подход легче читать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...