变量声明差异var与cast或

时间:2015-08-19 11:50:02

标签: c# compilation runtime

两个声明之间是否存在任何背景差异:

var x = (string)null;

string x = null;

运行时会以不同的方式处理此声明吗?编译器会产生相同的IL吗?

2 个答案:

答案 0 :(得分:3)

是的,它会产生相同的IL:

void Main()
{
    var x = (string)null;
    string y = null;
}

生成(关闭优化):

IL_0000:  nop         
IL_0001:  ldnull      
IL_0002:  stloc.0     // x
IL_0003:  ldnull      
IL_0004:  stloc.1     // y
IL_0005:  ret        

从编译器的角度来看,您要将null分配给string变量。

答案 1 :(得分:1)

在第一种情况下,编译器不知道x的类型,除非您在强制转换中指定它。然而,在两种情况下得到的IL代码都是相同的。