我知道有可能有Nullable值类型包装值类型,并提供存储空值的能力。 但是有没有技术原因不允许值类型为空或原因只是概念?为什么值类型不能为空
17
A
回答
33
引用类型被存储为对象实例的引用(如指针)。
null
表示不指向对象实例的引用。
值类型作为值本身存储,没有任何引用。
因此,根据定义包含一个值,具有null
值类型—值类型没有意义。
Nullable<T>
是一个值类型,其中HasValue
标志可以是false
以指示没有值。它仍然有一个值(当HasValue
是false
,Value
是default(T)
),但HasValue
标志会告诉您忽略该值。
它与null
无关,除了CLR自动将null
装箱值设置为Nullable<T>
而HasValue
设置为false
。
0
像“Int32”这样的值类型使用32位存储来存储。正好有3294,967,296个值可以用32位来表示,而Int32可以容纳4,294,967,296个不同的值。如果-2,147,483,648不是有效的Int32值,则可以使用它来表示“null”,但其二进制表示不全为零的事实会使事情复杂化。相比之下,引用类型中可能的位组合的数量远远超过可能的有效引用的数量,因此没有任何困难保留位组合来表示“空”。
+0
任何参考(文章)你正在解释什么?我仍然不清楚你放置的想法。 – Marshal
相关问题
- 1. 为什么我不能将泛型类型转换为值类型
- 2. React.createElement:类型不能为空
- 3. 为什么对象类不是空值
- 4. 模型值为空,但为什么?
- 5. 为什么不能访问该类型?
- 6. 为什么不能注入泛型类?
- 7. 为什么&&和||不能用于可空类型?
- 8. 属性不能为空时使用什么异常类型?
- 9. 为什么graphql,红宝石的布尔类型不是空值
- 10. 类类型转换:为什么类型转换功能不叫
- 11. 为什么不能模板非类型参数是类类型
- 12. 值类型数据结构不能接受为什么
- 13. 为什么不能修改的左值具有数组类型?
- 14. 为什么我不能将TextLength分配给Long值类型?
- 15. 为什么我们不能锁定值类型?
- 16. 为什么我不得不为None返回一个类型值?
- 17. 类型不推导为r值参考:为什么不呢?
- 18. 为什么这种类型不能分配给参数类型?
- 19. 为什么null类型的值不能用作double类型的默认参数?
- 20. 为什么不能将可空值声明为const?
- 21. 为什么不能有一个类型参数是什么?
- 22. 值不能为空
- 23. 值不能为空
- 24. 为什么不能为嵌套函数推断类型
- 25. 为什么不能将C常量存储为短类型
- 26. 为什么'as'操作符不能用于解析不可为空的值类型?
- 27. 不能将类型'char'隐式转换为类型Test <char>,为什么?
- 28. 为什么我们不能将char类型变量的默认值设置为''
- 29. 不能为索引类型为'String'的类型'[String:AnyObject]'下标值
- 30. System.Drawing.Point是一个值类型。为什么?
我们可以使变量为空吗?运营商。例如,int? x = null; – Shekhar
@Shekhar:他意识到这一点。它与'null'无关。 – SLaks
感谢您的解释。 – Shekhar