我有一个数组,我想将其转换为对象。这是我的代码。将数组投射到对象
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)
,而不需要编译器抱怨,所以这里有什么问题?
我有一个数组,我想将其转换为对象。这是我的代码。将数组投射到对象
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)
,而不需要编译器抱怨,所以这里有什么问题?
您正试图向下倾倒(:?>
),而不是向上倾斜(:>
)。您的代码应该是:
let a = [| 1 |]
let b = a :> obj
有关更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd233220.aspx。
虽然低潮的答案当然是正确的,有一个obj
为向上转型的特殊情况下,另一种解决方案,这是box
操作:
let a = [| 1 |]
let b = box a
在F#,box
不具有相同的含义它在CLR中执行,它意味着“使一个引用类型对象对应于一个值类型值”。在F#中,它只是表示“投射到obj
”。因此,您可以使用box
以及引用类型以及值类型。
哇,你说得对。我不知道为什么这不会发生在我身上。我甚至明确地驳斥了这个想法...... – 2014-09-28 20:43:05