C # 8 переключить выражение несколько случаев с одинаковым результатом - PullRequest
1 голос
/ 20 июня 2019

Как нужно написать выражение-переключатель для поддержки нескольких случаев, возвращающих один и тот же результат?

При использовании 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 только для одного switch-case-arm, чтобы значениеНе нужно ли повторять?

Обновление по предложению от " Руфус L ":

Для моего данного примера это работает.

var switchValue = 3;
var resultText = switchValue switch
{
    var x when (x >= 1 && x <= 3) => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

Но это не совсем то, чего я хочу достичь.Это все еще только один случай (с условием фильтра), а не несколько случаев, дающих один и тот же правый результат.

1 Ответ

1 голос
/ 20 июня 2019

Я нашел способ его установить, но я не нашел способа, чтобы случай с другим синтаксисом передавался другому.

Однако вы можете создать новую переменную, которая захватит значение, а затемиспользуйте условие для представления случаев, которые должны иметь один и тот же результат:

var resultText = switchValue switch
{
    var x when
        x == 1 ||
        x == 2 ||
        x == 3 => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

Это на самом деле более кратко, если у вас есть много вариантов для тестирования, потому что вы можете проверить диапазон значений в одной строке:

var resultText = switchValue switch
{
    var x when x > 0 && x < 4 => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};
...