由于我想知道Nullable<T>
上某些操作的效率,我去检查了Microsoft网站上的reference source(并了解到HasValue
和GetValueOrDefault
不涉及任何转换,而.Value
确实如此。浏览文件,我注意到它是一个不可变类型,具有T
,
public static implicit operator Nullable<T>(T value) {
return new Nullable<T>(value);
}
我认为允许我写一行像
int? x;
x = 3;
然而,这并没有解释如何
x = null;
的工作原理。 Nullable
是值类型,因此通常不允许这样做。最初我期望operator=
或类似的重载,但我无法弄清楚它的论点应该是什么(除了Nullable<T>
)。
我想那时编译器知道Nullable
并以特殊的方式处理它们,但我猜测开发团队本来想把它保持在最低限度,所以我想知道编译器到底是什么知道。它如何处理像x = null
这样的行,以及我在reference implementation中找不到的其他内容在幕后做了什么?