如何将真正的int32 []的System.Object转换为double []?

fs_*_*ech 2 f#

我从第三方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)

Ste*_*ham 7

你的意思是你想要的吗?

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)