При написании оператора switch существуют два ограничения на то, что вы можете включить в операторах case.
Например (да, я знаю, если вы делаете такие вещи, это, вероятно, означает ваш object-oriented (OO) архитектура iffy - это просто надуманный пример!),
Type t = typeof(int);
switch (t) {
case typeof(int):
Console.WriteLine("int!");
break;
case typeof(string):
Console.WriteLine("string!");
break;
default:
Console.WriteLine("unknown!");
break;
}
Здесь оператор switch() терпит неудачу с "Ожидаемым значением целочисленного типа", а утверждения case терпят неудачу с "Ожидается постоянное значение".
Почему эти ограничения существуют и что является основополагающим оправданием? Я не вижу причин, почему оператор switch должен поддаваться только статическому анализу, и почему включенное значение должно быть интегральным (то есть примитивным). Какое оправдание?