我有一个数组,我想将它转换为一个对象。这是我的代码。
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)
,所以这里有什么问题?
答案 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
与引用类型以及值类型一起使用。