为什么值类型不能为null

NDe*_*per 18 .net c# clr null value-type

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

SLa*_*aks 37

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

值类型存储为值本身,没有任何引用.
因此,拥有null值类型没有意义- 定义的值类型包含值.

Nullable<T>是一个带有HasValue标志的值类型,可以false表示没有值.它仍然有一个值(当HasValuefalse,Valuedefault(T)),但HasValue标志告诉你忽略的价值.
它没有任何关系null,只是CLR自动unboxes null装箱值到Nullable<T>HasValue设置为false.

  • @Shekhar:他意识到这一点.它与`null`无关. (3认同)