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

Уже был вопрос, отправленный здесь, который очень похож. Мой расширяет тот вопрос немного больше. Скажите, что Вы хотите поймать несколько типов исключения, но хотеть обработать его тот же путь, существует ли способ сделать что-то как случай переключателя?

switch (case)
{
  case 1:
  case 2:

  DoSomething();
  break;
  case 3:
  DoSomethingElse()
  break;

}

Действительно ли возможно обработать немного исключений тот же путь. Что-то как

try
{
}
catch (CustomException ce)
catch (AnotherCustomException ce)
{
  //basically do the same thing for these 2 kinds of exception
  LogException();
}
catch (SomeOtherException ex)
{
 //Do Something else
}

23
задан Community 23 May 2017 в 11:55
поделиться

4 ответа

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

В качестве альтернативы вы можете сделать, как описано в этом вопросе:

Перехватить несколько исключений одновременно?

Лично я предпочитаю подход, основанный на методах.

15
ответ дан 29 November 2019 в 02:52
поделиться

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

0
ответ дан 29 November 2019 в 02:52
поделиться

Вы действительно должны иметь BaseCustomException и поймать его.

8
ответ дан 29 November 2019 в 02:52
поделиться

Я никогда не делал этого или чего-то подобного, и у меня нет доступа к компилятору для тестирования, но уверен, что что-то подобное будет работать. Не уверен, как на самом деле выполнять сравнение типов или позволит ли C# заменить оператор if на оператор case.

try 
{ 
}
catch (System.Object obj)
{
  Type type;

  type = obj.GetType() ;
  if (type == CustomException || type == AnotherCustomException)
  { 
    //basically do the same thing for these 2 kinds of exception 
    LogException(); 
  } 
  else if  (type == SomeOtherException ex) 
  { 
    //Do Something else 
  }
  else
  {
    // Wasn't an exception to handle here
    throw obj;
  }
}
-5
ответ дан 29 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

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