The C Sharp switch Statement

From Techotopia
Revision as of 14:45, 5 May 2016 by Neil (Talk | contribs) (Text replacement - "<table border="0" cellspacing="0" width="100%">" to "<table border="0" cellspacing="0">")

Jump to: navigation, search
PreviousTable of ContentsNext
C# Flow Control with if and elseC# Looping - The for Statement


Purchase and download the full PDF and ePub versions of this Visual C# eBook for only $9.99


In C# Flow Control Using if and else we looked at how to control program execution flow using the if and else statements. Whilst these statement constructs work well for testing a limited number of conditions they quickly become unwieldy when dealing with larger numbers of possible conditions. To simplify such situations C# has inherited the switch statement from the C programming language. In this chapter we will explore the switch statement in detail.


Contents


Why Use a switch Statement?

For a small number of logical evaluations of a value the if ... else if ... construct outlined in C# Flow Control Using if and else is perfectly adequate. Unfortunately, any more than two or three possible scenarios can quickly make such a construct both time consuming to write and difficult to read. As a case in point consider the following code example. The program is designed to prompt a user for a car model and subsequently uses if .. else if ... statements to evaluate the car manufacturer:

using System;
using System.Text;

class Hello
{
        static void Main()
        {
                string carModel;
                string carManufacturer;

                System.Console.Write ("Please Enter Your Vehicle Model: ");

                carModel = System.Console.ReadLine();

                if ((String.Compare(carModel, "Patriot") == 0) ||
                    (String.Compare(carModel, "Liberty") == 0) ||
                    (String.Compare(carModel, "Wrangler") == 0))
                {
                      carManufacturer = "Jeep";
                }
                else if (String.Compare(carModel, "Focus") == 0)
                {
                      carManufacturer = "Ford";
                }
                else if (String.Compare(carModel, "Corolla") == 0)
                {
                     carManufacturer = "Toyota";
                }
                else
                {
                     carManufacturer = "unknown";
                }

                System.Console.Write("Manufacturer is " + carManufacturer);
        }
}

As you can see, whilst the code is not too excessive it is already starting to become somewhat hard to read and also took more time to write than should really be necessary. Imagine, however, if instead of 3 car models we had to test for 10 or 20 models. Clearly an easier solution is needed, and that solution is the switch statement.

Using the switch Statement Syntax

The syntax for a C# switch statement is as follows:

 switch (value)
{ case constant:
statements
break/jump
case constant:
statements
break/jump
default:
statements
break/jump
}

This syntax needs a little explanation before we embark on creating a switch based version of the above if ... else construct.

In the above syntax outline value represents either a value, or an expression which returns a value. This is the value against which the switch operates. Using our example this would be the string representing the car model.

For each possible match a case statement is required, followed by a constant value (once again using our example this would be the car models). Each case constant must be of the same type as the governing value. Following on from the case line are the C# statements which are to be executed in the event of the value matching the case constant.

After the statements comes an optional break, goto or continue statement. These statements are used either to break out of the switch statement when a match is found, goto a specific location in the code or skip any remaining code in a loop and begin the next iteration.

Finally, the default section of the construct defines what should happen if none of the case statements present a match to the value.


A switch Statement Example

With the above information in mind we may now construct a switch statement which provides the same functionality as our previous and somewhat unwieldy if ... else if ... construct:

using System;
using System.Text;

class Hello
{
        static void Main()
        {
                string carModel;
                string carManufacturer;

                System.Console.Write ("Please Enter Your Vehicle Model: ");

                carModel = System.Console.ReadLine();

                switch (carModel)
                {
                     case "Patriot":
                     case "Liberty":
                     case "Wrangler":
                           carManufacturer = "Jeep";
                           break;
                     case "Focus":
                           carManufacturer = "Ford";
                           break;         
                     case "Corolla":
                           carManufacturer = "Toyota";
                           break;
                     default:
                           carManufacturer = "unknown";
                           break;
                }  

                System.Console.Write("Manufacturer is " + carManufacturer);

        }
}

Explaining the Example

When compiled and run, the sample application will prompt for a car model. Once entered, the response is assigned to the carModel string variable which in turn is used as the governing variable in the switch statement. As is the case with the Jeep manufacturer, case statements may be grouped together preceding a single set of statements.

The default option simply sets the carManufacturer string to unknown if none of the case statements match the string entered by the user.

Using goto in a C# switch Statement

In the above section we used break to exit out of the switch statement. The result of this is to move the point of program execution to the statements immediately following the switch statement. Unfortunately this presents a problem when the default statements are also required to be executed. To address this requirement, we can replace the break statements in our example code with a goto default statement:

using System;
using System.Text;

class Hello
{
        static void Main()
        {
                string carModel;
                string carManufacturer = "unknown";

                System.Console.Write ("Please Enter Your Vehicle Model: ");

                carModel = System.Console.ReadLine();

                switch (carModel)
                {
                     case "Patriot":
                     case "Liberty":
                     case "Wrangler":
                           carManufacturer = "Jeep";
                           goto default;
                     case "Focus":
                           carManufacturer = "Ford";
                           goto default;         
                     case "Corolla":
                           carManufacturer = "Toyota";
                           goto default;
                     default:
                           System.Console.WriteLine ("The " + carModel + " is manufactured by " + carManufacturer);
                           break;
                }  

        }
}

Whilst the goto statement could also be used to jump to a labeled location in our C# code, its use is strongly discouraged. The use outlined above is really the only acceptable use of the goto statement in a modern object oriented language such as C#. As any veteran programmer will tell you, if you find yourself in a position where a goto statement is your only way of achieving something then you need to re-think and re-structure your code so that you no longer need the goto.

Using continue in a C# switch Statement

Another alternative to the break statement is the continue statement. If the switch statement is part of a loop, the continue statement will cause execution to return immediately to the beginning of the loop, bypassing any subsequent code yet to be executed in the current loop iteration.


Purchase and download the full PDF and ePub versions of this Visual C# eBook for only $9.99



PreviousTable of ContentsNext
C# Flow Control with if and elseC# Looping - The for Statement