Как указано в комментариях, новое сопоставление с образцом коммутатора ожидает возврата результата.
В F # , поскольку все является выражением, тип void
на самом деле является допустимым типом возвращаемого значения для выражения, и это сработало бы.
В случае, аналогично вашему я думаю, что лучше использовать старый код, но если вы действительно хотите использовать новый синтаксис, вы можете сделать что-то вроде этого:
Action methodToExecute = exampleCode switch
{
ExampleCode.DefaultInterfaceMethod => RunDefaultInterfaceMethodExample,
ExampleCode.PatternMatchingEnhancements => RunPatternMatchingEnhancementsExample,
_ => throw new NotImplementedException()
};
methodToExecute();
(это будет работать только если методы, которые вы используете для каждого случая выполняются одинаковые определения)
Хорошей практикой является использование исчерпывающего шаблона, поэтому я использую последний случай с подчеркиванием. В C# значения перечисления компилируются в целые числа, и даже если ваш переключатель обрабатывает все метки перечисления, компилятор все еще не знает, что вы обработали все случаи, и когда вы добавляете новую метку в перечисление, у вас не будет надлежащего предупреждения, что у вас есть необработанный регистр.
Каждый раз, когда вы используете перечисления, лучше использовать регистр по умолчанию, в который попадают все необработанные регистры.