我从第三方API获取数据,它只是给了我一个System.Object,我知道这是一个双重的[]。为了处理这种返回类型,我发现下面的代码工作得非常好。但是,我还得到了一些也伪装成System.Object的int []数组,特别是以YYYYMMDD形式的日期(例如20100310)。
转换为float失败,它只是说指定的强制转换是无效的。有没有人知道如何使整数工作?
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
答案 0 :(得分:7)
你的意思是你想要
floatArr.[i] <- float (objArr.[i] :?> int)
将对象强制转换为int然后提升为float?
实际上,你可以通过在类型
上使用模式匹配来获得更好的服务open System
let o2f (obj : System.Object) =
match obj with
| :? array<float> as arr -> arr
| :? array<int> as irr -> irr |> Array.map float
| _ -> [|Double.NaN|]