变量声明差异var与强制类型转换或
本文关键字:类型转换 var 声明 变量 | 更新日期: 2023-09-27 18:08:47
两个声明在背景上有什么不同吗?
var x = (string)null;
和
string x = null;
运行时将以不同的方式处理这些声明吗?编译器会生成相同的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
变量。
在第一种情况下,编译器不知道x
的类型,除非你在强制转换中指定它。然而,在这两种情况下产生的IL代码是相同的。