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

时间:2012-02-12 12:14:45

标签: c# dynamic .net-4.0 var

如果我们有:

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

enter image description here

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

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

2 个答案:

答案 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