我们可以将“每个”值类型转换为c#中的引用类型吗?

时间:2015-03-08 15:36:08

标签: c#

我知道我们通常可以将值类型转换为引用类型(例如Object),但我想知道每个值类型是否属实。

是否有任何特殊值类型我们无法将其列入参考类型?

3 个答案:

答案 0 :(得分:2)

Boxing 是您正在寻找的关键字,但严格来说,从.NET的角度来看, no, 几乎所有的目的都没有t任何无法转换为Object的值类型(引用类型)。

编辑:正如@PetSerAl在问题的评论和here中指出的那样,还有更多内容:

例如,特殊的ArgIterator类型包含指向本地堆栈的指针 - 如果允许离开当前作用域,则会变得毫无意义(甚至是危险的) - 同样适用于TypedReference和{ {1}}。您可以在以下网站找到更多相关信息: ECMA 335 specification,第I.8.2.1.1节(托管指针和相关类型)。

答案 1 :(得分:2)

至少有两种特殊值类型无法装箱:TypedReferenceArgIterator。您也不能将字段输入为此类型(CS0610),并且您不能拥有此类型的数组(CS0611)。因此,有效地,这种类型的变量只允许在堆栈上。

答案 2 :(得分:0)

从技术上讲,可以为空的值类型也不能装入其类型的实例,因为它们被转换为其基础类型的实例,或者为null。