.Net如何将Nullables设置为Null
Nullable
类型被定义为struct
。 在.Net中,您不能将null
赋给struct
因为structs
是不能用null
表示的值类型( Nullable
除外)。
int i = null; // won't compile - we all know this int? i = null; // will compile, and I'm glad it does, and it should compile, but why?
Nullable
如何成为规则的例外“你不能为值赋值null
?” Nullable
的反编译代码没有提供关于如何发生这种情况的见解。
Nullable
如何成为规则的例外“你不能为值赋值null?”
通过改变语言,基本上。 null
文字从“空引用”变为“相关类型的空值”。
在执行时,可空值类型的“空值”是HasValue
属性返回false
。 所以这:
int? x = null;
相当于:
int? x = new int?();
值得将Nullable
的框架部分与语言和CLR方面分开。 事实上,CLR本身并不需要了解可空值的类型 – 据我所知,唯一重要的方面是可空值类型的空值被装箱为空引用,你可以unbox对任何可空值类型的null值的null引用。 即使这只是在.NET 2.0最终版本发布之前引入的。
语言支持主要包括:
- 句法糖的forms
?
那么int?
相当于Nullable
- 提升运营商
- 改变了
null
含义 - null-coalescing运算符(
??
) – 不限于可空值类型