В целом (с учетом всех языков и всех компиляторов) оператор switch МОЖЕТ СОДЕРЖАТЬ, когда оператор if / else более эффективен, поскольку компилятору легко генерировать таблицы переходов из операторов switch. То же самое можно сделать для операторов if / else с учетом соответствующих ограничений, но это гораздо сложнее.
В случае C # это также верно, но по другим причинам.
С большим количеством строк есть существенное преимущество в производительности при использовании оператора switch, потому что компилятор будет использовать хеш-таблицу для реализации перехода.
При небольшом количестве строк производительность между ними одинакова.
Это связано с тем, что в этом случае компилятор C # не создает таблицу переходов. Вместо этого он генерирует MSIL, который эквивалентен блокам IF / ELSE.
Существует инструкция MSIL «оператор переключения», которая при соединении будет использовать таблицу переходов для реализации оператора переключения. Однако он работает только с целочисленными типами (этот вопрос касается строк).
Для небольшого числа строк компилятору более эффективно генерировать блоки IF / ELSE, чем использовать хеш-таблицу.
Когда я первоначально заметил это, я сделал предположение, что поскольку блоки IF / ELSE использовались с небольшим количеством строк, компилятор сделал то же самое преобразование для большого количества строк.
Это было НЕПРАВИЛЬНО. «IMA» был достаточно любезен, чтобы указать мне на это (ну ... он не был добр в этом, но он был прав, а я был неправ, что является важной частью)
Я также сделал предположение о том, что в MSIL отсутствует инструкция «switch» (я подумал, что если есть примитив switch, почему они не используют его с хэш-таблицей, поэтому не должно быть примитива switch. ...) Это было неправильно и невероятно глупо с моей стороны. И снова «IMA» указал мне на это.
Я сделал обновления здесь, потому что это пост с самым высоким рейтингом и принятый ответ.
Тем не менее, я сделал это вики-сообществом, потому что считаю, что не заслуживаю REP за то, что был неправ. Если у вас есть шанс, пожалуйста, проголосуйте за пост Има.