The Nullable<T>
类型被定义为struct
。在.Net中,你不能分配null
to a struct
因为structs
是无法表示的值类型null
(除了Nullable<T>
).
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?
How did Nullable<T>
成为“你不能分配null
到值类型?”的反编译代码Nullable<T>
没有提供关于这是如何发生的见解。
How did Nullable<T>
成为规则“你不能将 null 分配给值类型?”的例外。
基本上是通过改变语言。这null
文字从“空引用”变为“相关类型的空值”。
在执行时,可空值类型的“空值”是这样的值:HasValue
财产回报false
。所以这:
int? x = null;
相当于:
int? x = new int?();
值得将其分开框架部分Nullable<T>
从语言和CLR方面。事实上,CLR 本身不需要了解太多关于可为空值类型的信息 - 据我所知,唯一重要的方面是可为空值类型的空值被装箱为空引用,并且您可以取消对任何可空值类型的空值的空引用的装箱。即便如此,它也是在 .NET 2.0 最终版本发布之前才引入的。
语言支持主要包括:
- 语法糖的形式为
?
so int?
相当于Nullable<int>
- 提升操作员
- 改变后的含义
null
- 空合并运算符 (
??
) - 不限于可空值类型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)