最近在修改其中一个概念时,我遇到了一个有趣的情况,我想知道为什么会这样。
我们知道一个概念,我们无法为值类型分配空值,即Struct
,int
,DateTime
等。
为了分配null
,我们需要可以为空的类型,即
int i
应替换为Nullable<int> i = null
但是,如果我们看到Nullable<T>
它也是struct
类型,那么如何分配null
而不说明任何错误?为什么微软反对它自己的声明“Null不能分配给价值类型”
如果有人知道背后的原因吗?
答案 0 :(得分:20)
因为Nullable<T>
具有编译器级支持;在null
的上下文中,Nullable<T>
基本上是HasValue
标记false
的值,其中 - 非空值的HasValue
true
的旗帜。同样地,&#34;解除了#34;运算符来自定义的运算符。同样地,Nullable<T>
在装箱方面具有 CLI 支持:Nullable<T>
HasValue
false
的{{1}}变为null
,而不是{{1}}一个新的盒子实例。
基本上:这一切都归结为,因为这就是他们定义的应该如何工作。
人们想要可以为空的价值类型:微软找到了实现这一目标的方法。