将数组转换为对象

Luk*_*vat 1 f#

我有一个数组,我想把它投射到一个对象.这是我的代码.

let a = [| 1 |]
let b = a :?> obj
Run Code Online (Sandbox Code Playgroud)

但它告诉我int [] has no proper subtypes and cannot be used as a source of runtime type coercion.我很确定我可以(object)在没有编译器抱怨的情况下在C#中做,所以这里的问题是什么?

ebb*_*ebb 8

你正在尝试downcast(:?>),而不是upcast(:>).你的代码应该是:

let a = [| 1 |]
let b = a :> obj
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd233220.aspx.


pho*_*oog 8

虽然ebb的答案当然是正确的,但是对于向上转换的特殊情况还有另一种解决方案obj,即box运营商:

let a = [| 1 |]
let b = box a
Run Code Online (Sandbox Code Playgroud)

在F#中,box与CLR中的含义不同,这意味着"使引用类型对象与值类型值对应".在F#中,它只是意味着"施放到" obj.因此,您可以使用box引用类型以及值类型.