enum
In C# switch
can act upon enum
values. An enum
switch
sometimes results in clearer code. The resulting instructions are sometimes faster as well.
The C# switch
-enum
code pattern is often effective. It is used in many real-world programs (not just website examples).
Enums help us deal with magic constants. For the switch
statement here, look at the IsImportant
method—it uses 5 explicit cases and a default case.
IsImportant()
has a switch
that tests the Priority enum
. It returns true if the Priority value is Important or Critical.switch
here as a kind of filtering mechanism for enum
value ranges.using System; enum Priority { Zero, Low, Medium, Important, Critical }; class Program { static void Main() { // New local variable of the Priority enum type. Priority priority = Priority.Zero; // Set priority to critical on Monday. if (DateTime.Today.DayOfWeek == DayOfWeek.Monday) { priority = Priority.Critical; } // Write this if the priority is important. if (IsImportant(priority)) { Console.WriteLine("The problem is important."); } // See if Low priority is important. priority = Priority.Low; Console.WriteLine(IsImportant(priority)); // See if Important priority is. priority = Priority.Important; Console.WriteLine(IsImportant(priority)); } static bool IsImportant(Priority priority) { // Switch on the Priority enum. switch (priority) { case Priority.Low: case Priority.Medium: case Priority.Zero: default: return false; case Priority.Important: case Priority.Critical: return true; } } }The problem is important. False True
How is the enum
switch
compiled? The C# code is compiled into a special .NET instruction called a jump table. The jump table uses the IL instruction switch
.
L_0004: switch (L_001f, L_001f, L_001f, L_0023, L_0023)
When you have a set of constants, I recommend you use switch
—it can have better performance. And the code is clearer to read.
We saw examples of how you can switch
on enums. Switch can improve performance when it is implemented by a jump table in the MSIL. This is determined by the compiler.