Превращение If / else if / else в Switch / Case в C # - PullRequest
0 голосов
/ 01 октября 2019

Я уточняю свое понимание массивов и операторов if / else if / else. Я хочу посмотреть, смогу ли я преобразовать свои операторы if / else if / else в Switch / Case. Какой лучший способ пойти по этому поводу? Я слышал, что Switch / Case гораздо эффективнее, когда имеешь дело с более широким диапазоном вариантов. Должен ли я остаться с if / else? или есть способ конвертировать мой выбор в Switch Case? Вот пример, который я делаю для них и в коде.

{
        int []  acct = new int [3];

        acct[0] = 8675309;
        acct[1] = 8675310;
        acct[2] = 8675311;

        Console.WriteLine("Enter your account number");
        int myacct = int.Parse(Console.ReadLine());
        //int myacct = Convert.ToInt32(Console.ReadLine());<--This works too
        if (myacct == acct[0])
        {
            Console.WriteLine("What is your name?");
        }
        else if (myacct == acct[1])
        {
            Console.WriteLine("What is your name?");
        }
        else if (myacct == acct[2])
        {
            Console.WriteLine("What is your name?");
        }
        else
        {
            Console.WriteLine("Sorry you don't have access");
        }

        string name = Console.ReadLine();

        string[] names = new string[3] { "Jenny", "Roberto", "Sally" };
        /*  This shows them how to tighten the code up compaired to the technique we used above
        names[0] = "Jenny";
        names[1] = "Roberto";
        names[2] = "Sally";
        */

        //I'd like to make the following code into a Switch and Case type statement instead of using else if.


        /*
        if (myacct == acct [0] && name == "Jenny")
        {
            Console.WriteLine("Welcome "+names[0] + "!");
        }


        else if (myacct == acct[1] && name == "Roberto")
        {
            Console.WriteLine("Welcome Roberto" + names[1] + "!");
        }
        else if (myacct == acct[2] && name == "Sally")
        {
            Console.WriteLine("Welcome Sally" + names[2] + "!");
        }
        else
        {
            Console.WriteLine("Account number and Names do not match");
        }
        */
    }
}

1 Ответ

0 голосов
/ 01 октября 2019

Я смотрю на это так:

  • switch(value) объявляет о намерении кодера принимать решения о ветвлении на основе value
  • if - else if может иметь произвольныйусловия
  • есть вероятность случайного if вместо else if в середине цепочки, что может привести к ошибкам или неправильному пониманию намерений исходного кодера.

До C # 6.0 switch case может работать только с постоянными значениями, что означает, что при более гибкой цепочке if - else if у вас могут возникнуть некоторые трудности с прямым переводомэто switch в C # 6.0 и ниже.

Начиная с C # 7.0, было введено более гибкое сопоставление с шаблоном , позволяющее использовать непостоянные шаблоны.

В C # 8.0 также есть выражения-переключатели , свойства и шаблоны кортежей , которые могут сделать код намного более читабельным и кратким в некоторых случаях.

...