Stumbled upon an interesting question on StackOverflow today regarding what goes on under the hood when you use the switch statement in C#.
Based on the answer by Brian Gideon (kudos for doing all that legwork!), for the following code:
public static int Main(string[] args) { switch (args[0]) { case "1": return 1; case "2": return 2; case "3": return 3; } return 0; }
the C# compiler will:
- if the number of case statements is small then emit a sequential equality comparison;
- if the number of case statements is large then emit a Dictionary lookup.
Also, on a related question regarding if-else vs. switch statement, the updated answer also seems to confirm this finding (regarding the use of a string in the switch statement at least) and Jon Skeet’s comment to the answer by ‘ima’ suggests that the threshold is 6 before the compiler decides to build a hash table, i.e. case statement count >= 7 then build dictionary.