Ниже приведен пример, взятый из MSDN, try-catch (справочник по C#)
catch (ArgumentException e) if (e.ParamName == "…")
{
}
Они также говорят
Использование аргументов catch — это один из способов фильтрации исключений, которые вы хотите обработать. Вы также можете использовать выражение предиката, которое дополнительно исследует исключение, чтобы решить, следует ли его обрабатывать. Если выражение предиката возвращает false, поиск обработчика продолжается.
Фильтры исключений предпочтительнее перехвата и повторного создания (поясняется ниже), поскольку фильтры не повреждают стек. Если более поздний обработчик сбросит стек, вы сможете увидеть, откуда исходно возникло исключение, а не только место, где оно было вызвано в последний раз. Распространенным использованием выражений фильтра исключений является ведение журнала. Вы можете создать предикатную функцию, которая всегда возвращает false, которая также выводит в журнал, вы можете регистрировать исключения по мере их прохождения без необходимости их обработки и повторного создания.
Мой код:
static bool LogFunction(System.Exception ex)
{
System.Console.WriteLine("Writing to logfile: {0}", ex.Message);
return false;
}
static void Main(string[] args)
{
try
{
throw new System.ArgumentException("The exception message...");
}
catch(System.Exception ex) if (LogFunction(ex))
{
System.Console.WriteLine("This will not be executed, ever!");
}
catch(System.ArgumentException ex)
{
// ....
}
}
Теперь компилятор не будет компилировать это (csc.exe), выдавая следующее сообщение об ошибке:
error CS1003: Syntax error, 'when' expected
Изменить: компилятор вызывает ошибку для строки
error CS1003: Syntax error, 'when' expected
Что я делаю неправильно?
Спасибо.
EDIT: я отправил отзыв в MSDN, указав на ошибку в документации.
if
заменить словоwhen
? - person entropic   schedule 19.11.2015catch
с заглавной буквой C. Пожалуйста, отметьте это в MSDN, используя функцию Any Suggestions. - person AWinkle   schedule 19.11.2015