我有一個數組,我想將其轉換爲對象。這是我的代碼。將數組投射到對象
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