С 'At compile time, an element that is typed as dynamic is assumed to support any operation', я бы предположил, что это означало бы, что если бы я использовал его в операторе switch
, компилятор предположил бы, что динамическая переменная будет поддерживаемым типом для оператора switch.Почему оператор C# switch не принимает тип «dynamic»?
Вопреки моему, заявление
dynamic thing = "thing";
switch (thing) {
case "thing": {
Console.WriteLine("Was a thing.");
Console.ReadKey();
break;
}
default: {
Console.WriteLine("Was not thing.");
Console.ReadKey();
break;
}
}
дает ошибку времени компиляции: A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type
. Так что же дает? В чем причина этого ограничения?
Поскольку для ключевых слов «case:» требуется значение literal/constant. Что будет динамическим литералом? – elgonzo
Поскольку тип, который вы переключаете, должен быть известен во время компиляции. Динамические значения не известны во время компиляции, только во время выполнения. – danludwig
Почему бы не 'switch ((string) вещь)', поскольку вы явно уже знаете, что такое тип? –