The C# switch
statement executes one statement from multiple conditions. It is like if-else-if ladder statement in C#.
switch
statements can branch program execution based on a selection of possible values.
The syntax for a C# switch statement is as follows:
switch(expression)
{
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
break;
}
This is how it works:
switch
expression is evaluated oncecase
break
and default
keywords will be described later in this chapter
The switch expression is of integer type such as: int
, char
, byte
, or short
, or of an enum type
, or of string type
.
The expression is checked for different cases and the one match is executed.
At the end of each case
clause, we must set where execution is to go next, with a jump statement.
For each case
you have the following options:
break
: jumps to the end of the switch statementgoto case x
: jumps to another case clausegoto default
: jumps to the default clausereturn
, throw
, continue
, or goto label
When more than one value should execute the same code, list the common cases sequentially:
switch (cardNumber)
{
case 13:
case 12:
case 11:
Console.WriteLine ("Face card");
break;
default:
Console.WriteLine ("Plain card");
break;
}
Important points to remember:
case
values are not allowed.switch
and value
of a case must be of the same type.break
in switch statement is used to terminate the current sequence.default
statement is optional and it can be used anywhere inside the switch statement.default
statements are not allowed.
The following flowchart illustrates how the c# switch statement works:
Example:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FirstProgram
{
class Program
{
static void Main(string[] args)
{
char grade = 'A'; /* local variable definition */
switch (grade)
{
case 'A':
Console.WriteLine("Excellent!");
break;
case 'B':
case 'C':
Console.WriteLine("Well done");
break;
case 'D':
Console.WriteLine("You passed");
break;
case 'F':
Console.WriteLine("Better try again");
break;
default:
Console.WriteLine("Invalid grade");
break;
}
Console.WriteLine("Your grade is {0}", grade);
Console.ReadLine();
}
}
}
Output:
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 with a goto default
statement.
For Example:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FirstProgram
{
class Program
{
static void Main(string[] args)
{
string carModel;
string carManufacturer = "unknown";
Console.Write("Please Enter Your Vehicle Model: ");
carModel = 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:
Console.WriteLine("The " + carModel + " is manufactured by " + carManufacturer);
break;
}
Console.ReadLine();
}
}
}
Output:
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.
In c#, we can use enum
values with switch
statements to perform required operations.
Example of using enum values in the c# switch case statement:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FirstProgram
{
class Program
{
public enum location
{
loc_1,
loc_2,
loc_3
}
static void Main(string[] args)
{
location loc = location.loc_2;
switch (loc)
{
case location.loc_2:
Console.WriteLine("Location: location_2");
break;
case location.loc_3:
Console.WriteLine("Location: location_3");
break;
case location.loc_1:
Console.WriteLine("Location: location_1");
break;
default:
Console.WriteLine("Not Known");
break;
}
Console.ReadLine();
}
}
}
Output:
It is possible to have a switch
as part of the statement sequence of an outer switch
. Even if the case constants of the inner and outer switch
contain common values, no conflicts will arise.
Syntax:
The syntax for a nested switch
statement is as follows:
switch(ch1)
{
case 'A':
printf("This A is part of outer switch" );
switch(ch2)
{
case 'A':
printf("This A is part of inner switch" );
break;
case 'B': /* inner B case code */
}
break;
case 'B': /* outer B case code */
}
Example:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FirstProgram
{
class Program
{
static void Main(string[] args)
{
int a = 200;
int b = 300;
switch (a)
{
case 200:
Console.WriteLine("This is part of outer switch ");
switch (b)
{
case 300:
Console.WriteLine("This is part of inner switch ");
break;
}
break;
}
Console.WriteLine("Exact value of a is : {0}", a);
Console.WriteLine("Exact value of b is : {0}", b);
Console.ReadLine();
}
}
}
Output:
The following code uses switch statement to branch out grade scales:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FirstProgram
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1-Below 40");
Console.WriteLine("2-Between 41 and 60");
Console.WriteLine("3-Between 60 and 79");
Console.WriteLine("4-Above 80");
Console.WriteLine("Enter your score: ");
int score = int.Parse(Console.ReadLine());
switch (score)
{
case 1:
Console.WriteLine("Poor performance");
break;
case 2:
Console.WriteLine("Average performance");
break;
case 3:
Console.WriteLine("Good performance");
break;
case 4:
Console.WriteLine("Excellent performance");
break;
default:
break;
}
Console.ReadLine();
}
}
}
Output: