Em geral (considerando todos os idiomas e todos os compiladores), uma instrução switch pode às vezes ser mais eficiente que uma instrução if / else, porque é fácil para um compilador gerar tabelas de salto a partir das instruções switch. É possível fazer o mesmo com instruções if / else, dadas as restrições apropriadas, mas isso é muito mais difícil.
No caso de C #, isso também é verdade, mas por outros motivos.
Com um grande número de cadeias, há uma vantagem significativa de desempenho ao usar uma instrução switch, porque o compilador usará uma tabela de hash para implementar o salto.
Com um pequeno número de strings, o desempenho entre os dois é o mesmo.
Isso ocorre porque, nesse caso, o compilador C # não gera uma tabela de salto. Em vez disso, gera MSIL equivalente aos blocos IF / ELSE.
Existe uma instrução MSIL "switch statement" que, quando acionada, usa uma tabela de salto para implementar uma instrução switch. Porém, ele funciona apenas com tipos inteiros (esta pergunta pergunta sobre cadeias).
Para um pequeno número de strings, é mais eficiente para o compilador gerar blocos IF / ELSE do que usar uma tabela de hash.
Quando percebi isso originalmente, assumi que, como os blocos IF / ELSE eram usados com um pequeno número de cadeias, o compilador fez a mesma transformação para um grande número de cadeias.
Isso foi errado. 'IMA' teve a gentileza de apontar isso para mim (bem ... ele não foi gentil com isso, mas ele estava certo, e eu estava errado, que é a parte importante)
Também fiz uma suposição sobre a falta de uma instrução "switch" no MSIL (imaginei que, se havia um primitivo de switch, por que eles não o estavam usando com uma tabela de hash, portanto, não deve haver um primitivo de switch). ...) Isso foi errado e incrivelmente estúpido da minha parte. Mais uma vez 'IMA' apontou isso para mim.
Fiz as atualizações aqui porque é a postagem com a melhor classificação e a resposta aceita.
No entanto, eu criei o Community Wiki porque acho que não mereço o REP por estar errado. Se você tiver uma chance, vote na publicação de 'ima'.