2014-09-28 255 views
1

我有一個數組,我想將其轉換爲對象。這是我的代碼。將數組投射到對象

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),而不需要編譯器抱怨,所以這裏有什麼問題?

回答

8

您正試圖向下傾倒(:?>),而不是向上傾斜(:>)。您的代碼應該是:

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

有關更多詳細信息,請參閱http://msdn.microsoft.com/en-us/library/dd233220.aspx

+0

哇,你說得對。我不知道爲什麼這不會發生在我身上。我甚至明確地駁斥了這個想法...... – 2014-09-28 20:43:05

7

雖然低潮的答案當然是正確的,有一個obj爲向上轉型的特殊情況下,另一種解決方案,這是box操作:

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

在F#,box不具有相同的含義它在CLR中執行,它意味着「使一個引用類型對象對應於一個值類型值」。在F#中,它只是表示「投射到obj」。因此,您可以使用box以及引用類型以及值類型。