【发布时间】:2009-09-07 04:51:36
【问题描述】:
通过 C# 从 CLR 中提取关于装箱/拆箱值类型 ...
装箱:如果可空实例不是null,CLR 会从可空实例中取出值并将其装箱。换句话说,一个值为 5 的 Nullable 被装箱成一个值为 5 的 boxed-Int32。
关于拆箱:拆箱只是获取对已装箱对象的未装箱部分的引用的行为。问题是装箱的值类型不能简单地拆箱为该值类型的可为空版本,因为装箱的值中没有 boolean hasValue 字段。因此,当将值类型拆箱为可空版本时,CLR 必须分配一个 Nullable
为什么 CLR 团队在 Nullable 类型上遇到这么多麻烦?为什么一开始不简单地将它装箱成 Nullable
【问题讨论】:
-
"拆箱时的内存分配" 什么???这本书在这方面肯定是错误的。
-
@BenVoigt 拆箱成可空类型比拆箱成普通类型慢大约 20 倍,但只有在常规转换时,
as运算符才不会比常规拆箱慢。跨度>