变量声明差异var与强制类型转换或

本文关键字:类型转换 var 声明 变量 | 更新日期: 2023-09-27 18:08:47

两个声明在背景上有什么不同吗?

var x = (string)null;

string x = null;

运行时将以不同的方式处理这些声明吗?编译器会生成相同的IL吗?

变量声明差异var与强制类型转换或

是的,它产生相同的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变量。

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