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