У MS нет веской причины не реализовывать переключение типов, кроме лени.
Строковое переключение выполняется с использованием «if (.. Equals (..))» в нескольких случаях и словаря во многих случаях. Оба этих подхода определены для всех типов .NET, потому что System.Object имеет виртуальные Equals и GetHashCode.
Можно сказать, что «switch может использовать выражение любого типа, где Equals и GetHashCode переопределяются», что автоматически квалифицирует строку, Type и т. Д. Да, плохая реализация Equals / GetHashCode нарушит оператор switch, но эй, вы также может нарушить оператор "==", цикл "foreach" и кучу других вещей, поэтому я не вижу "большой проблемы" с переключателем, который был сломан по ошибке программиста. Но даже если они не хотят разрешать это для всех типов, по любой причине, безусловно, Type является безопасным, потому что Type.Equals () хорошо определен и GetHashCode также реализован.
Кроме того, я не покупаю аргумент, что вы рассматриваете наследование; Параметр switch относится к случаю, в котором константа (а тип (int) является константой, не допускайте ошибок) равна выражению - наследование - это еще одно «поведение» типа Type. Не нужно даже рассматривать наследование, я имею в виду, мы отказываемся сравнивать 2 объекта только потому, что у них есть другие качества? Нет, мы не делаем, потому что равенство всегда определяется. По сути, дело в том, что между разными типами нет совпадений.
Итак, как я сказал, есть одна причина и только одна причина: лень. :)