Уже был вопрос, отправленный здесь, который очень похож. Мой расширяет тот вопрос немного больше. Скажите, что Вы хотите поймать несколько типов исключения, но хотеть обработать его тот же путь, существует ли способ сделать что-то как случай переключателя?
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
}
В настоящее время не существует языковой конструкции для выполнения того, что вы хотите.Если все исключения не являются производными от базового исключения, вам необходимо рассмотреть возможность рефакторинга общей логики в метод и вызвать его из разных обработчиков исключений.
В качестве альтернативы вы можете сделать, как описано в этом вопросе:
Перехватить несколько исключений одновременно?
Лично я предпочитаю подход, основанный на методах.
Вы не должны перехватывать такое количество настраиваемых исключений, однако, если хотите, вы можете создать общее BaseException
и поймать его.
Вы действительно должны иметь BaseCustomException и поймать его.
Я никогда не делал этого или чего-то подобного, и у меня нет доступа к компилятору для тестирования, но уверен, что что-то подобное будет работать. Не уверен, как на самом деле выполнять сравнение типов или позволит ли 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;
}
}