En general (considerando todos los idiomas y todos los compiladores), una declaración de cambio PUEDE SER A VECES más eficiente que una declaración de if / else, porque es fácil para un compilador generar tablas de salto a partir de declaraciones de cambio. Es posible hacer lo mismo para las declaraciones if / else, dadas las restricciones apropiadas, pero eso es mucho más difícil.
En el caso de C #, esto también es cierto, pero por otras razones.
Con una gran cantidad de cadenas, existe una ventaja de rendimiento significativa al usar una instrucción switch, porque el compilador usará una tabla hash para implementar el salto.
Con un pequeño número de cadenas, el rendimiento entre los dos es el mismo.
Esto se debe a que en ese caso el compilador de C # no genera una tabla de salto. En su lugar, genera MSIL que es equivalente a los bloques IF / ELSE.
Hay una instrucción MSIL de "declaración de cambio" que, cuando se modifique, utilizará una tabla de salto para implementar una declaración de cambio. Sin embargo, solo funciona con tipos enteros (esta pregunta se refiere a cadenas).
Para pequeñas cantidades de cadenas, es más eficiente que el compilador genere bloques IF / ELSE que usar una tabla hash.
Cuando noté esto originalmente, asumí que debido a que los bloques IF / ELSE se usaban con una pequeña cantidad de cadenas, el compilador hizo la misma transformación para grandes cantidades de cadenas.
Esto estaba mal. 'IMA' tuvo la amabilidad de señalarme esto (bueno ... él no fue amable al respecto, pero tenía razón y yo estaba equivocado, lo cual es la parte importante)
También hice una suposición descabellada sobre la falta de una instrucción de "cambio" en MSIL (supuse que, si había una primitiva de conmutación, ¿por qué no la usaban con una tabla hash? Por lo tanto, no debe haber una primitiva de conmutación). ...) Esto estaba mal, e increíblemente estúpido de mi parte. Nuevamente, 'IMA' me señaló esto.
Hice las actualizaciones aquí porque es la publicación mejor calificada y la respuesta aceptada.
Sin embargo, lo hice Community Wiki porque creo que no merezco el REP por estar equivocado. Si tienes la oportunidad, vota la publicación de 'ima'.