2
我從第三方API獲取數據,這些數據只是給了我一個System.Object,我知道它是一個double []。爲了處理這種返回類型,我發現下面的代碼可以很好地工作。但是,我還找回了一些也僞裝成System.Object的int []數組,具體日期形式爲YYYYMMDD(例如20100310)。如何將System.Object的確是一個int32 []轉換爲double []?
轉換爲浮動失敗,它只是說,指定的轉換無效。有沒有人知道如何讓這項工作的整數?
let oIsNull (obj : System.Object) = obj = null
let oIsArray (obj : System.Object) = obj.GetType().IsArray
let o2f (obj : System.Object) =
let mutable arr = [|Double.NaN|]
if (oIsNull obj = false) && (oIsArray obj = true) then
let objArr = obj :?> obj[]
let u = objArr.GetUpperBound(0)
let floatArr : float[] = Array.zeroCreate (u + 1);
for i in 0..u do
if objArr.[i] = null then
floatArr.[i] <- Double.NaN
else
let t = objArr.[i].GetType()
floatArr.[i] <- objArr.[i] :?> float
//else floatArr.[i] <- float objArr.[i]
arr <- floatArr
arr
有趣的類型匹配服務 - 我想這正是我想要做的事。謝謝,這是有效的。 – 2010-03-10 21:25:49
我喜歡模式匹配的例子。非常感謝。 – 2010-03-10 23:22:27
在這種情況下,我可能會更喜歡使用'Array.map',它可能比'Seq.map'後跟'toArray'更有效(因爲它可以預先以正確的長度分配返回的數組)。 – 2010-03-10 23:56:24