. net编程语言中的可空类型
本文关键字:类型 编程语言 net | 更新日期: 2023-09-27 18:10:01
最近在修改其中一个概念时,我遇到了一个有趣的情况,我想知道为什么会发生这种情况。
我们知道一个概念,我们不能给值类型(如Struct
, int
, DateTime
等)赋空值。
为了分配null
,我们需要可空类型,即
int i
应替换为Nullable<int> i = null
但是如果我们看到Nullable<T>
也是struct
类型,那么为什么null
可以被分配而没有任何错误呢?为什么微软反驳了它自己的声明"Null不能分配给值类型"
是否有人知道这背后的原因?
因为Nullable<T>
有编译器级别的支持;在Nullable<T>
的上下文中,null
本质上是一个HasValue
标志为false
的值,而作为一个非空值,HasValue
标志为true
。类似地,"提升"操作符是从定义的操作符派生出来的。同样,在装箱方面,Nullable<T>
也有CLI支持:一个装箱的Nullable<T>
加上false
的HasValue
就变成了null
,而不是一个新的盒子实例。
基本上:这一切都归结为,因为这就是他们定义它应该工作的方式。
人们想要可空的值类型:微软想出了一种方法来实现。