为什么值类型不能为null

我知道可以使用Nullable值类型来包装值类型并提供存储null的能力。 但有技术原因是不允许值类型为null或原因只是概念性的?

引用类型存储为对象实例的引用(如指针)。
null表示未指向对象实例的引用。

值类型存储为值本身,没有任何引用。
因此,具有null值类型没有意义 – 根据定义 ,值类型包含值。

Nullable是一个值类型,其HasValue标志可以为false ,表示没有值。 它仍然有一个值(当HasValuefalseValuedefault(T) ),但HasValue标志告诉您忽略该值。
它与null无关,除了CLR自动将null盒装值取消装箱为NullableHasValue设置为false

使用32位存储器存储类似’Int32’的值类型。 精确地有4,294,967,296个值可以用32位表示,Int32可以容纳4,294,967,296个不同的值。 如果-2,147,483,648不是有效的Int32值,则可能使用它来表示“null”,但其二进制表示不是全零的事实会使事情复杂化。 相比之下,参考类型中可能的位组合的数量远远超过可能的有效引用的数量,因此保留位组合以表示“空”没有困难。