En général (en tenant compte de toutes les langues et tous les compilateurs) une instruction switch PEUT PARFOIS être plus efficace que d'un if / else, car il est facile pour un compilateur pour générer sauter les tables à partir d'instructions de commutation. Il est possible de faire la même chose pour les if / else, compte tenu des contraintes appropriées, mais qui est beaucoup plus difficile.
Dans le cas de C#, c'est vrai aussi, mais pour d'autres raisons.
Avec un grand nombre de chaînes de caractères, il existe un important avantage de performance à l'aide d'une instruction switch, parce que le compilateur va utiliser une table de hachage pour mettre en œuvre le saut.
Avec un petit nombre de chaînes de caractères, les performances entre les deux est le même.
C'est parce que dans ce cas, le compilateur C# ne pas générer un saut de la table. Au lieu de cela, il génère MSIL qui est équivalent à if / ELSE blocs.
Il y a un "switch" instruction MSIL que lorsque jitted va utiliser un saut de la table pour mettre en œuvre une instruction switch. Il fonctionne uniquement avec les types integer, toutefois, cette question porte sur les chaînes de caractères).
Pour les petits nombres de chaînes, il est plus efficace pour le compilateur pour générer des SI / d'AUTRE blocs, puis il consiste à utiliser une table de hachage.
Quand j'ai d'abord remarqué, j'ai fait l'hypothèse que, parce que SI / d'AUTRE des blocs ont été utilisés avec un petit nombre de chaînes, que le compilateur n'a la même transformation pour un grand nombre de chaînes.
C'était FAUX. 'IMA' a eu la gentillesse de le signaler à moi (bien...il n'était pas du genre à ce sujet, mais il avait raison et j'avais tort, ce qui est l'essentiel)
J'ai aussi fait un abruti hypothèse sur l'absence d'un "switch" de l'enseignement en MSIL (j'ai pensé, si il y avait un interrupteur primitive, pourquoi n'ont-ils pas de l'utiliser avec une table de hachage, donc il ne doit pas être un interrupteur de primitives.... ). C'était à la fois tort et incroyablement stupide de ma part. Une fois de plus 'IMA' l'a souligné à moi.
J'ai fait les mises à jour ici parce que c'est la cote la plus élevée de poste, et l'on a accepté la réponse.
Cependant,je l'ai fait Wiki de la Communauté parce que je me dis que je ne mérite pas la REP pour le mal. Si vous obtenez une chance, veuillez jusqu'vote "ima"s post.