C# Switch If условие для расширения случаев переключения - PullRequest
4 голосов
/ 20 февраля 2020

У меня есть некоторые данные, которые нужно преобразовать, для этого мне нужно условие переключения с более чем 50 случаями, мне нужны одни и те же случаи 3 раза, но в третий раз мне нужны 50 случаев, а некоторые больше, и я не хочу написать один и тот же код дважды. Может быть, есть возможность сделать что-то подобное.

switch (example)
{
    case "1":
        //do something
    case "2":
        //do something
    case "50":
        //do something
    //now maybe something like this
    if (condition == true)
    {
        case "1":
            //do something else than above at case "1", and so on 
            //now its i little bit illogical, but i neet to do the first 50 cases and then
            //use the cases 1 to 50 again but with other actions 
    }
}

Ответы [ 3 ]

16 голосов
/ 20 февраля 2020

Начиная с C# 7, вы можете комбинировать оператор case с when предложением и использовать его, чтобы немного упростить ваш код

switch (example)
{
    case "1":
        //do something
    case "2":
        //do something
    case "50":
        //do something
    //now maybe something like this
    case "51" when condition == true:
        //do something, and so on  
    default:
        break;   
}

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

4 голосов
/ 20 февраля 2020

Полагаю, вы ищете способ не повторять if (condition == true). Помимо нового предложения when в C # 7, вы также можете использовать другой подход с двумя операторами switch:

if (!condition)
{
    switch (example)
    {
        case "1":
            //do something
        case "2":
            //do something
        case "50":
            //do something
    }
} else {
    switch (example)
    {
        case "51:
            //do something, and so on 
    }
}
0 голосов
/ 20 февраля 2020

Создайте всегда совпадающий регистр с with условия.

switch (example)
{
    case "1":
    case example when condition == true:
        //do something
    case "2":
        //do something
    case "50":
        //do something
}
...