由於'At compile time, an element that is typed as dynamic is assumed to support any operation',我認爲這將意味着如果我在switch
語句中使用它,編譯器會認爲動態變量是switch語句支持的類型。爲什麼C#switch語句不能接受'動態'類型?
出乎我的想法,聲明
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)thing)'因爲你明確已經知道類型是什麼? –