我知道我们通常可以将值类型转换为引用类型(例如Object
),但我想知道每个值类型是否属实。
是否有任何特殊值类型我们无法将其列入参考类型?
答案 0 :(得分:2)
Boxing 是您正在寻找的关键字,但严格来说,从.NET的角度来看, no, 几乎所有的目的都没有t任何无法转换为Object
的值类型(引用类型)。
编辑:正如@PetSerAl在问题的评论和here中指出的那样,还有更多内容:
例如,特殊的ArgIterator
类型包含指向本地堆栈的指针 - 如果允许离开当前作用域,则会变得毫无意义(甚至是危险的) - 同样适用于TypedReference
和{ {1}}。您可以在以下网站找到更多相关信息: ECMA 335 specification,第I.8.2.1.1节(托管指针和相关类型)。
答案 1 :(得分:2)
至少有两种特殊值类型无法装箱:TypedReference
和ArgIterator
。您也不能将字段输入为此类型(CS0610),并且您不能拥有此类型的数组(CS0611)。因此,有效地,这种类型的变量只允许在堆栈上。
答案 2 :(得分:0)
从技术上讲,可以为空的值类型也不能装入其类型的实例,因为它们被转换为其基础类型的实例,或者为null。