Я делаю небольшой проект хобби в C#, язык я не знаю хорошо, и наткнулся на следующем:Как отличить различные типы исключений в обработчик событий BackgroundWorker.RunWorkerCompleted
Предположит, у вас есть асинхронная операция реализован с использованием BackgroundWorker. Теперь, если есть исключение, событие RunWorkerCompleted будет поднято, а RunWorkerCompletedEventArgs.Error будет не нулевым.
Является ли следующий канонический способ обработки различных типов исключений? (При этом все виды исключений являются братьями и сестрами WRT наследование)
if (e.Error != null)
{
FirstKindOfException e1 = e as OneKindOfException;
SecondKindOfException e2 = e as SecondKindOfException;
...
LastKindOfException en = e as LastKindOfException;
if (e1 != null)
{
...
}
else if (e2 != null)
{
...
}
...
else
{
...
}
}
Это работает, но ... он не чувствует себя правильно.
Правильно, но в коде e1 и e2 оба должны быть e.Error. Откат, если вы не согласны. –
@Henk actully Я намеревался только «е», но ты прав - это было неправильно, как написано. –