我从第三方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
Run Code Online (Sandbox Code Playgroud)
你的意思是你想要的吗?
floatArr.[i] <- float (objArr.[i] :?> int)
Run Code Online (Sandbox Code Playgroud)
将对象强制转换为int然后提升为浮点数?
实际上,通过在线条上使用模式匹配可以更好地服务
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|]
Run Code Online (Sandbox Code Playgroud)