Я искал способ рефакторинга и упростил одну функцию, где мне нужно сортировать данные в зависимости от типа входного класса и застрял в switch(input.GetType()):
Быстрый поиск привел меня к Почему оператор С# switch не позволяет использовать typeof/GetType()? со ссылкой на http://blogs.msdn.com/peterhal/archive/2005/07/05/435760.aspx
Я прочитал документацию, но я не понимаю, что ситуация запутанна.
Из статьи:
К сожалению, как и многие "простые" языковые функции, переключатель типа не так же просто, как вначале. проблемы начинаются, когда вы смотрите на более значительным и не менее важным, Пример:
class C {}
interface I {}
class D : C, I {}
switch typeof(e) {
case C: ... break;
case I: ... break;
default: ... break;
}
Что не так просто? Вызов typeof(e)
не может возвратиться - это I
D
и C
. Он должен вернуть Type
не массив интерфейсов и типов классов - Type[]
. Таким образом, тип class D
равен D
. А D
соответствует ветки default:
.
Я что-то пропустил?