gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:53:18 25 4
gpt4 key购买 nike

我从第 3 方 API 获取数据,它只返回一个 System.Object,我知道它是一个 double[]。为了处理该返回类型,我发现下面的代码非常有效。但是,我也找回了一些也伪装成 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

最佳答案

你是说你想要

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|]

关于f# - 如何将真正是 int32[] 的 System.Object 转换为 double[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2420630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com