Вы используете dynamic
для ввода Convert.ToString
. Поскольку вход dynamic
, привязка метода и проверка типов откладываются до времени выполнения, поэтому компилятор не видит, что единственный возможный тип возврата - string
. Компилятор в основном останавливает всю привязку и проверку типов в этот момент.
Даже если вы назвали fiftySixInt = fiftySixDynamic.ToString()
, который не может иметь перегрузку, которая возвращает int
, вы не получите никаких предупреждений от компилятора.
Один из способов избежать во время компиляции ошибок пока еще позволяют динамическое поведение является приведение возвращения:
int fiftySixInt = (string)System.Convert.ToString(fiftySixDynamic);
Это выглядит излишним, но он говорит компилятору рассматривать возвращаемое значение как string
для связывания цели. Метод все еще связан во время выполнения, поэтому, если тип возвращаемого значения - , а не - строка, вы получите исключение во время выполнения, но методы последующих потоков будут привязаны во время компиляции.
Моя рекомендация опубликуйте это как ошибку. Я не уверен, в каком месте она будет уходить. –
@ChrisMarisic Это именно то, что он должен делать. Если он * не * скомпилировал *, что * будет ошибкой. – Servy
Это указывает на слабость в C# - программисту не ясно, какие выражения отключили проверку типов. Дизайнеры языка лучше справились с небезопасными {} – buffjape