【发布时间】:2018-08-31 00:25:24
【问题描述】:
dynamic d = 5;
var array = new[] {d,"hello"}
array 的隐式类型是什么?是dynamic[] 而不是string[],为什么?
在深入了解 C# 时 - Jon Skeet 陈述了动态转换的规则:
从任何动态类型的表达式到 几乎任何 CLR 类型
后来他提到他故意说从“动态类型的表达式”而不是从动态类型本身转换。
您可能还注意到我写过关于“从 动态类型的表达式”到 CLR 类型,而不是从 动态类型本身。这种微妙之处有助于类型推断和 其他需要考虑隐式转换的情况 类型
我有点困惑或者可能缺少一些非常基本的东西,但这解释了为什么 array 类型原来是 dynamic[] 而不是 string[]。谁能帮我理解他的真正意思。
【问题讨论】:
-
听起来对我有误导性。编译器很乐意将 dynamic 类型的变量或表达式转换为任何东西。它必须,它不知道具体运行时类型的 bean,所以只能假设你做对了。但这并不意味着这会在运行时成功。
-
@HansPassant:谢谢!!我认为下面 Jon
dynamic d = 5; var array = new[] { "hello", d };的示例说明为什么array的类型是dynamic[]而不是string[]有助于理解意图。
标签: c# dynamic type-conversion implicit-conversion