Как можно написать выражение переключения для поддержки нескольких случаев, возвращающих один и тот же результат?
В C # до версии 8 переключатель можно записать так:
var switchValue = 3;
var resultText = string.Empty;
switch (switchValue)
{
case 1:
case 2:
case 3:
resultText = "one to three";
break;
case 4:
resultText = "four";
break;
case 5:
resultText = "five";
break;
default:
resultText = "unkown";
break;
}
Когда я использую C # версии 8 с синтаксисом выражения, это выглядит так:
var switchValue = 3;
var resultText = switchValue switch
{
1 => "one to three",
2 => "one to three",
3 => "one to three",
4 => "four",
5 => "five",
_ => "unknown",
};
Итак, мой вопрос: как превратить случаи 1, 2 и 3 только в одно плечо переключателя, чтобы значение не нужно было повторять?
Обновление по предложению от Руфуса Л.:
В моем примере это работает.
var switchValue = 3;
var resultText = switchValue switch
{
var x when (x >= 1 && x <= 3) => "one to three",
4 => "four",
5 => "five",
_ => "unknown",
};
Но это не совсем то, чего я хочу достичь. Это по-прежнему только один случай (с условием фильтрации), а не несколько случаев, дающих один и тот же результат справа.
when
в любом случае намного мощнее, чем провал. Вы можете использоватьContains
с массивом значений, если хотите. - person Panagiotis Kanavos   schedule 20.06.2019var x when listOfValues.Contains(x)
и обрабатывать столько случаев, сколько захотите. - person Panagiotis Kanavos   schedule 20.06.2019case 1: case 2:
- это кейсы с пустыми блоками, которые переходят в следующий - person Panagiotis Kanavos   schedule 20.06.2019when
может справиться с гораздо более сложными случаями, чем простой провал. Простой провал может обрабатывать только проверки равенства по жестко запрограммированному значению. Сопоставление с образцом иwhen
в выражениях переключателя одинаковы. Фактически, именно операторы switch вызывают проблемы с сопоставлением с образцом. Если вы проверите функциональные языки например F #, вы увидите, что основной вариант использования (часто только один) - это выражения сопоставления с образцом. - person Panagiotis Kanavos   schedule 20.06.2019