4.6. Switch Statement

4.6.1. Switch Statement

The switch statement is used to select one of many code blocks (“cases”) to be executed. Logically, it resembles the use of a series of else-if clauses.

The syntax for switch statement is as follows:

switch(expression)
{
case x:
    // code block
    break;
case y:
    // code block
    break;
default:
    // code block
    break;
}

Note that: - The switch expression is evaluated once. - The value of the expression is compared with the values of each case. - If there is a match between the expression value and the case value, the associated block of code is executed. - The break and default keywords will be described later in this chapter.

As an example, we can use the weekday number to figure out weekday name:

int day = 4;
switch (day)
{
case 1:
    Console.WriteLine("Monday");
    break;
case 2:
    Console.WriteLine("Tuesday");
    break;
case 3:
    Console.WriteLine("Wednesday");
    break;
case 4:
    Console.WriteLine("Thursday");
    break;
case 5:
    Console.WriteLine("Friday");
    break;
case 6:
    Console.WriteLine("Saturday");
    break;
case 7:
    Console.WriteLine("Sunday");
    break;
}

The outcome of this code will be Thursday. The code will stop executing because of the break keyword after the print line. Also, there is not default case in this code block.

4.6.2. The default Keyword

The default keyword is optional and it specifies some code to run if there is no case match:

int day = 4;
switch (day)
{
case 6:
    Console.WriteLine("Today is Saturday.");
    break;
case 7:
    Console.WriteLine("Today is Sunday.");
    break;
default:
    Console.WriteLine("Looking forward to the Weekend.");
    break;
}
// Outputs "Looking forward to the Weekend."

4.6.3. The break Keyword

When a match is found in a switch statement, the job is done, it’s time for a break. There is no need for more testing and matching cases. When C# reaches a break keyword, it breaks out of the switch block. This will stop the further sequential execution of code and case testing inside the block.

A break can save execution time because it ignores the execution of all the rest of the code in the switch block. But more importantly, a break servers as a terminator of the control flow. That also means that you may choose to continue matching cases after one is matched by not placing break at the end of the case block.