C# несколько вариантов переключения синтаксис лямбда одинакового значения - PullRequest
2 голосов
/ 18 июня 2020

Можно преобразовать это:

int x = 1;
string xString;
switch (x)
{
    case 1:
        xString = "1";
        break;
    case 2:
        xString = "2";
        break;
    default:
        xString = "default";
        break;
}
Console.WriteLine(xString);

в это:

int x = 1;
string xString = x switch
{
    1 => "1",
    2 => "2",
    _ => "default",
};
Console.WriteLine(xString);

Но каков будет синтаксис для установки значения xString на одно и то же значение с несколькими регистрами без создания лямбда-строка для каждого случая?

int x = 1;
string xString;
switch (x)
{
    case 1:
        xString = "1";
        break;
    case 2:
    case 4:
        xString = "even numbers";
        break;
    default:
        xString = "default";
        break;
}
Console.WriteLine(xString);

Ответы [ 2 ]

4 голосов
/ 18 июня 2020

К сожалению, вы не можете использовать диапазоны, но вы можете использовать when.

str = i switch
{
    int n when (n >= 100) => "asd1",
    int n when (n < 100 && n >= 50) => "asd2",
    int n when (n < 50) => "asd3",
    _ => str
};

или с отклонениями и неявной ссылкой

str = i switch
{
   _ when i >= 100 => "asd1",
   _ when i < 100 && i >= 50 => "asd2",
   _ when i < 50 => "asd3",
   _ => str
};

switch (C# ссылка)

Начиная с C# 7.0, поскольку операторы case не должны быть взаимоисключающими, вы можете добавить предложение when, чтобы указать дополнительное условие, которое должно выполняться для этого случая утверждение, которое оценивается как истина. Предложение when может быть любым выражением, которое возвращает логическое значение.

3 голосов
/ 18 июня 2020

Вы можете использовать предложение when с оператором switch и здесь

switch (x)
{
    case 1:
        xString = "1";
        break;
    case var _ when x % 2 == 0:
        xString = "even numbers";
        break;
    default:
        xString = "default";
        break;
}

с C# 8 switch выражением и отбрасывать его будь проще

var xString = x switch
{
    1 => "1",
    _ when x % 2 == 0 => "even numbers",
    _ => "default"
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...