C# switch statements are hashed

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.