Как Вы подавляете ошибки к вызову метода в C#?

Я попробовал все, в конце концов я посмотрел в файле hosts и там была случайная запись для github Удаление псевдонима исправило проблему

% systemroot% \ system32 \ drivers \ etc \ hosts

5
задан Jim Aho 6 September 2016 в 16:57
поделиться

7 ответов

Игнорировать / проглатывать ошибки редко бывает хорошей идеей ...

Чтобы разрешить повторное использование, единственный вариант, который у вас есть, - это что-то вроде метода, который принимает действие :

 static void IgnoreErrors(Action action) {try {action();} catch {}}

Но вы точно не сэкономили к тому времени, когда вы это сделали:

SomeHelper.IgnoreErrors(() => CallToMethodThatMayFail(3));

Я бы просто оставил try / catch на месте. ..


Повторите вопрос в комментарии:

static void IgnoreErrors<T>(Action action) where T : Exception
{
    try { action(); } catch (T) {}
}

SomeHelper.IgnoreErrors<ParseException>(() => CallToMethodThatMayFail(3));

, но я все же считаю более ясным наличие try / catch локально ...

10
ответ дан 18 December 2019 в 07:31
поделиться

Нет, это он.

И хорошо, что он многословен. Если вы подавляете возможное исключение, вам лучше иметь очень вескую причину. Многословие поможет вам или следующему человеку, который изучит код, через несколько месяцев.

5
ответ дан 18 December 2019 в 07:31
поделиться

Используя Castle, вы можете сделать что-то вроде этого:

public class ExceptionSuppressionInterceptor : Castle.Core.Interceptor.IInterceptor
{
   public void Intercept(IInvocation invocation)
   {
       try {
           invocation.Proceed();
       }
       catch (Exception ex) {
            // Suppressed!
       }
   }
}

И украсить класс, для которого вы хотите подавить исключения, вот так:

[Interceptor(typeof(ExceptionSuppressionInterceptor))]
public class GoodPracticeBreaker {

}

Но вы, вероятно, не должны.

4
ответ дан 18 December 2019 в 07:31
поделиться

Я не знаю ничего более лаконичного. Я полагаю, вы могли бы сделать АОП или что-нибудь подобное для чего-нибудь более интересного.

1
ответ дан 18 December 2019 в 07:31
поделиться

Соглашение .Net заключается в том, что классы реализуют метод TryCallMayFail () и метод CallMayFail (), и вызывающий абонент выбирает, какой из них использовать, но метод TryCallMayFail () будет включать именно то, что у вас есть .

1
ответ дан 18 December 2019 в 07:31
поделиться

Нет, лучшего способа сделать это нет, и для этого есть веская причина. Видимое исключение может означать нечто большее, чем «сбой метода». Это может означать, что «система дает сбой».

Вам, вероятно, стоит хотя бы зафиксировать факт сбоя, на случай, если он все-таки окажется важным.

0
ответ дан 18 December 2019 в 07:31
поделиться

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

0
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

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