Загалом (з огляду на всі мови та всі компілятори) оператор перемикача CAN SOMETIMES може бути більш ефективним, ніж оператор if / else, оскільки компілятору легко генерувати таблиці стрибків з операторів перемикання. Можна зробити те ж саме і для операторів if / else з відповідними обмеженнями, але це набагато складніше.
У випадку з C # це теж правда, але з інших причин.
З великою кількістю рядків є значна перевага в продуктивності використання оператора switch, оскільки компілятор буде використовувати хеш-таблицю для здійснення стрибка.
З невеликою кількістю струн продуктивність між ними однакова.
Це тому, що в такому випадку компілятор C # не генерує таблицю стрибків. Натомість він генерує MSIL, що еквівалентно блокам IF / ELSE.
Існує інструкція MSIL "твердження про перемикання", що при натисканні буде використовувати таблицю стрибків для реалізації оператора перемикання. Однак він працює лише з цілими типами (це питання задає рядки).
Для невеликої кількості рядків компілятору ефективніше генерувати блоки IF / ELSE, тож використовувати хеш-таблицю.
Коли я спочатку помітив це, я зробив припущення, що оскільки блоки IF / ELSE використовуються з невеликою кількістю рядків, компілятор здійснив те саме перетворення для великої кількості рядків.
Це було НЕПРАВНО. "IMA" був досить люб'язний, щоб вказати на це мені (ну ... він був недобрий до цього, але він мав рацію, і я помилявся, що важлива частина)
Я також висловив припущення про відсутність інструкції "перемикання" в MSIL (я зрозумів, якщо там був примітив комутатора, чому вони не використовували його з хеш-таблицею, тому не повинно бути примітиву перемикача. ...). Це було як неправильно, так і неймовірно нерозумно з мого боку. Знову "IMA" вказав на це мені.
Я зробив тут оновлення, оскільки це найвищий рейтинг і прийнята відповідь.
Однак я зробив це Community Wiki, тому що вважаю, що я не заслуговую на те, щоб REP не помилявся. Якщо ви отримаєте шанс, будь ласка, проголосуйте за повідомлення 'ima'.