我正在查看.NET Nullable
类的以下代码:http: //referencesource.microsoft.com/#mscorlib/system/nullable.cs,ffebe438fd9cbf0e
我想知道,以下用途的行为是什么:
int? x = null;
显然,x.hasValue()
返回false
,但是我看到在构造函数中,hasValue
属性总是设置为true
.
那我错过了什么?
"构造函数",是的,显式编写的构造函数Nullable
,但是所有结构都有一个额外的构造函数,一个不允许实现的无参数默认构造函数.这将始终存在.
因此,您可以将问题中的代码视为与此类似:
int? x = new Nullable();
实际上,如果我们编译你的代码和我的代码并查看生成的IL:
你的代码:
IL_0001: ldloca.s 00 // a IL_0003: initobj System.Nullable
我的代码:
IL_0001: ldloca.s 00 // a IL_0003: initobj System.Nullable
所以他们完全相同.
结构的默认构造函数将所有字段初始化为逐字节零,对于bool字段等于false,对于数字字段等于0,null
对于引用类型字段等等.