Какое стандартное исключение выдается, если в середине операции произошла ошибка?

1

Согласно RTFM, я не должен использовать Exception непосредственно для броска. При перефакторинге кода я изменил большинство из них на

  • InvalidOperationException если вызов метода неадекватен (неправильные предпосылки, время, состояние и т.д.);
  • TimeoutExeption когда есть тайм-аут;
  • ArgumentException (и related - ArgumentNullException и ArgumentOutOfRangeException), когда метод вызывается с неправильными параметрами;

Тем не менее, я пытался выяснить, какое исключение наиболее подходит, когда метод выполнил половину операции (так что параметры и состояние были в порядке), но затем возникает проблема (в моем случае это сообщение с внешним устройством, когда оно внезапно сообщает об ошибке "omg")).

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

  • 3
    Не каждый случай покрывается существующим исключением в .NET Framework. Средний прогресс на самом деле не кажется хорошим исключением для создания, но, учитывая ваше описание проблемы, почему бы вам не создать исключение DeviceCommunicationException, полученное из System.Exception? Кажется, это было бы совершенно уместно и описывало бы реальную проблему, с которой вы столкнулись.
  • 0
    @JamieSee, если я сделаю это один раз, то я не смогу прекратить делать это везде (появится больше DeviceCommunication.. появятся исключения);) Так что нет ничего более-менее по умолчанию ? InvalidOperationException действительно подходит (для пользователя метода причиной является неправильный вызов, в то время как устройство не было на 100% работоспособным , его проблемы есть). :)
Показать ещё 3 комментария
Теги:
exception
c++-cli
standards

1 ответ

-1

Это зависит от ситуации. Если это веб-служба (или, возможно, веб-сайт), вы можете выбросить 500 внутренних ошибок сервера.

В моей службе С# wcf в некоторых случаях я делаю следующее:

 throw new System.ServiceModel.Web.WebFaultException<string>(
                "Descriptive error message",
                System.Net.HttpStatusCode.InternalServerError);
  • 0
    какая-либо причина для понижения?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню