Попробуй поймать. Обработка нескольких исключений одинаково (или с провалом)
Здесь уже был поставлен вопрос , который очень похож. Мина расширяет этот вопрос немного больше. Предположим, вы хотите поймать несколько типов исключений, но хотите обрабатывать их одинаково, есть ли способ сделать что-то вроде случая с коммутатором?
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
}
Ответы
Ответ 1
В настоящее время нет языковой конструкции для выполнения того, что вы хотите. Если исключение не вытекает из базового исключения, вам необходимо рассмотреть возможность реорганизации общей логики для метода и вызвать его из разных обработчиков исключений.
В качестве альтернативы вы можете сделать так, как объяснено в этом вопросе:
Захват нескольких Исключений сразу?
Лично я предпочитаю метод, основанный на методе.
Ответ 2
У вас действительно должно быть BaseCustomException и поймать это.
Ответ 3
Это скопировано из другой публикации, но я тяну код в этот поток:
Поймать System.Exception
и включить типы
catch (Exception ex)
{
if (ex is FormatException || ex is OverflowException)
{
WebId = Guid.Empty;
return;
}
throw;
}
Я предпочитаю, чтобы это повторяло вызов метода в нескольких блоках catch.
Ответ 4
В vb.net можно использовать фильтры исключений, например,
Catch Ex As Exception When TypeOf Ex is ThisException Or TypeOf Ex is ThatException
К сожалению, по каким-то причинам разработчики С# еще отказались разрешить писать код фильтрации исключений в С#.
Ответ 5
Вы не должны улавливать это множество пользовательских исключений, однако, если хотите, вы можете создать общий BaseException
и поймать это.
Ответ 6
Я никогда не делал этого или что-то вроде этого, и у меня нет доступа к компилятору для тестирования, но наверняка что-то вроде этого будет работать. Не знаете, как на самом деле выполнить сравнение типов, или если С# разрешит вам заменять операторы 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;
}
}