Вот два предыдущих вопроса по этой теме:
Я работал сегодня и подумал, что это может быть подходящим синтаксисом, если эта функция будет когда-либо добавлена в язык C #. У кого-нибудь есть мнения по этому поводу?
Тип e
должен быть базовым типом или интерфейсом для каждого из перечисленных типов исключений.
Редактировать : В этом примере блок catch обрабатывает либо ArgumentNullException
, либо ArgumentOutOfRangeException
и помещает экземпляр исключения в переменную типа ArgumentException
с именем e
. Он не обрабатывает любой другой тип ArgumentException
, кроме двух перечисленных. Я думаю, что была некоторая путаница относительно ассоциативности ,
и as
.
Редактировать 2: Если все перечисленные исключения выгружаются в переменную типа e
, то код корректно компилируется в MSIL без каких-либо приведений или явных проверок типов, что делает его быстрее (потенциально значительно ) чем текущий синтаксис перехвата ArgumentException
, за которым следует throw;
, если он не является одним из двух, которые вы намеревались. Проблема становится еще более очевидной, если вы перехватываете Exception
и проверяете два возможных типа для обработки, а затем перебрасываете, если это что-то еще.
try
{
}
catch (ArgumentNullException, ArgumentOutOfRangeException as ArgumentException e)
{
}