将数组转换为对象

时间:2014-09-28 19:37:22

标签: f#

我有一个数组,我想将它转换为一个对象。这是我的代码。

let a = [| 1 |]
let b = a :?> obj

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

2 个答案:

答案 0 :(得分:8)

您正在尝试向下转发(:?>),而不是向上转播(:>)。你的代码应该是:

let a = [| 1 |]
let b = a :> obj

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

答案 1 :(得分:8)

尽管ebb的回答当然是正确的,但对于obj的{​​{1}}向box运算符的特殊情况还有另一种解决方案:

let a = [| 1 |]
let b = box a

在F#中,box与CLR中的含义不同,这意味着"创建与值类型值对应的引用类型对象。&#34 34;在F#中,它只表示"强制转换为obj。"因此,您可以将box与引用类型以及值类型一起使用。