var to dynamic在编译时是否已知?

Roy*_*mir 2 c# var dynamic .net-4.0

如果我们有:

dynamic x = "hello"; // Static type is dynamic, runtime type is string
var y = "hello"; // Static type is string, runtime type is string
Run Code Online (Sandbox Code Playgroud)

精细.

关于什么

dynamic x = *veryComplicatedRunTimeStructure_UnknownatCompileTime.*; 
var y=x; 
Run Code Online (Sandbox Code Playgroud)

DOES编译!

我在second这里有一个问题.

众所周知,它是var编译时评估的.

在此输入图像描述

但是在编译时它没有关于类型的线索....

所以... y的编译类型是什么?

Jon*_*eet 5

当赋值表达式的类型是dynamic,隐式声明的变量的类型也是如此.这里没什么特别的dynamic- 你的代码相当于:

dynamic x = new { t = 3, y = 3 };
dynamic y = x;
Run Code Online (Sandbox Code Playgroud)

从C#4规范的第8.5.1节开始:

在局部变量声明的上下文中,标识符var充当上下文关键字.当局部变量类型被指定为var与没有类型命名var是在范围内,声明可以是隐式类型变量声明,其类型从相关联的初始化表达式的类型推断.

[...]

在隐式类型的局部变量声明中,声明的局部变量的类型与用于初始化变量的表达式的类型相同.

所以在这里,表达式是dynamic,变量也是如此......