Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Switch ... case


Автор: Lexicss 27.8.2009, 12:15
Оператор Switch .. case

Может ли этот оператор выполняться на условии диапазона значений например Switch(x) ... case 12 .. case 15? (т.е. выполнить при условии если x=12 или 13, или 14, или 15)
В MSDN написано что вроде как не поддерживает неявное "проваливание". 
Но если всё-таки надо, кто как выкручивается? Можно делить на интервал, но это подходит если интервал одинаковый.
Какие ещё есть методы?

Автор: azesmcar 27.8.2009, 12:26
Вообще-то это делается так
Код

int i = 3;
switch (i)
{
    case 1:
    case 2:
    case 3:
    case 4:
        Console.WriteLine("Hello");
        break;
    case 5:
    case 6:
    case 7:
    case 8:
        Console.WriteLine("Bye");
        break;
}

но я не думаю что на таких больших интервалах имеет смысл применять switch.

Автор: Akina 27.8.2009, 12:27
язычок назовём? потому как в Jscript фортель, который показал azesmcar, не пройдёт...

Автор: azesmcar 27.8.2009, 12:29
Цитата(Akina @  27.8.2009,  12:27 Найти цитируемый пост)
язычок назовём? потому как в Jscript фортель, который показал azesmcar, не пройдёт... 

Пора бы раздел создать для C#, я этот раздел как C# воспринимаю smile 

Автор: ДобренькийПапаша 27.8.2009, 14:25
В C# можно также, насколько я помню.

Автор: azesmcar 27.8.2009, 14:33
Цитата(ДобренькийПапаша @  27.8.2009,  14:25 Найти цитируемый пост)
В C# можно также, насколько я помню. 

Так я же для C# писал

Автор: Lexicss 27.8.2009, 16:35
azesmcar, по поводу перечисления понятно. А если у меня диапазон от 101 до 200. Неразумно все 100 case перечислять. 
Так какие ещё варианты, заменить все case на if что ли? :(

Автор: Rohoss 27.8.2009, 17:09
Цитата(Lexicss @  27.8.2009,  16:35 Найти цитируемый пост)
Неразумно все 100 case перечислять. 

Так не перечесляйте  smile 
Код

            int i = 3;
            switch (i)
            {
                case 101:
                    Console.WriteLine("Hello");
                    break;
                case 200:
                    Console.WriteLine("Bye");
                    break;
            }


Код

            int x = 150;
            bool b = ((x > 100) && (x < 201));
            switch (b)
            {
                case true:
                    Console.WriteLine("true");
                    break;
                case true:
                    Console.WriteLine("false");
                    break;
            }

Автор: neiron 28.8.2009, 09:03
Комбинируйте switch с if. Как то:

Код

if (i<10)
    switch (i)
    {
        case 0: case1: case6:
            DoSomething();
            break;
        case3:
            DoAny();
            break;
        default:
            DoFoo();
            break;
    }
else if (i < 100)
    DoBar();


Правда, часто такие конструкции запутывают очень сильно, но иногда наоборот код более читаемым делают.

Автор: nikitao 28.8.2009, 10:47
Lexicss,  в C# нет поддержки диапазонов. В описанной вами задаче лучше всего последовотельно рассматривать необходимые диапазоны через if ы. И не смешивайте вместе if и switch - это отрицательно сказывается на читабельности кода.

Автор: Lexicss 31.8.2009, 17:13
Короче в C# этого нету, вместо switch остаётся только использовать if. Спасибо всем ктоучавствовал в обсуждении.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)