如果我们有:
dynamic x = "hello"; // Static type is dynamic, runtime type is string
var y = "hello"; // Static type is string, runtime type is string
精细。
怎么样
dynamic x = *veryComplicatedRunTimeStructure_UnknownatCompileTime.*;
var y=x;
它DOES
编译!
我的second
行存在问题。
众所周知,在编译时间内评估var
。
但是在编译时, 没有关于类型的线索......
所以... y的编译类型是什么?
答案 0 :(得分:5)
当赋值表达式的类型为dynamic
时,隐式声明的变量的类型也是如此。这里dynamic
没什么特别的 - 你的代码相当于:
dynamic x = new { t = 3, y = 3 };
dynamic y = x;
来自C#4规范的第8.5.1节:
在局部变量声明的上下文中,标识符
var
充当上下文关键字。当 local-variable-type 指定为var
并且没有名为var
的类型在范围内时,声明是隐式类型变量声明 ,其类型是从关联的初始化表达式的类型推断出来的。[...]
在隐式类型的局部变量声明中,局部变量的类型是 声明的内容与用于初始化变量的表达式的类型相同。
所以这里的表达式为dynamic
,变量......
答案 1 :(得分:4)
此代码:
dynamic x = new {t = 3; y=3};
var y = x;
等于:
dynamic x = new {t = 3; y=3};
dynamic y = x;
因此,要回答您的问题,y
的类型为dynamic
。