我知道可以使用可空值类型来包装值类型并使其能够存储 null 值。
但是,为什么不允许值类型为 null?这是技术上的原因还是概念上的原因?
引用类型被存储为对对象实例的引用(类似于指针)。
null
表示一个未指向任何对象实例的引用。
值类型被存储为值本身,没有任何引用。
因此,没有意义将值类型设为null
——按照定义,值类型包含一个值。
Nullable<T>
是一个带有HasValue
标志的值类型,该标志可以设置为false
以指示没有值。它仍然有一个值(当HasValue
为false
时,Value
为default(T)
),但HasValue
标志告诉您忽略该值。
它与null
无关,只是CLR自动将null
装箱值拆箱为一个HasValue
设置为false
的Nullable<T>
。