变量声明的区别 var 与 cast or
Variable declaration differences var with cast or
两个声明的背景是否有区别:
var x = (string)null;
和
string x = null;
运行时会以不同方式处理此声明吗?编译器会生成相同的 IL 吗?
在第一种情况下,编译器不知道 x
的类型,除非您在强制转换中指定它。然而,在这两种情况下生成的 IL 代码是相同的。
是的,它产生相同的 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
变量。
两个声明的背景是否有区别:
var x = (string)null;
和
string x = null;
运行时会以不同方式处理此声明吗?编译器会生成相同的 IL 吗?
在第一种情况下,编译器不知道 x
的类型,除非您在强制转换中指定它。然而,在这两种情况下生成的 IL 代码是相同的。
是的,它产生相同的 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
变量。