Я получаю данные от стороннего API, который просто возвращает мне System.Object, который, как я знаю, является двойным [] под одеялом. И чтобы разобраться с этим типом возврата, я обнаружил, что приведенный ниже код прекрасно работает. Однако я также получаю некоторые массивы int [], которые также маскируются под System.Object, в частности даты в виде ГГГГММДД (например, 20100310).
Преобразование в число с плавающей точкой завершается неудачно, и оно просто говорит, что указанное приведение недействительно. Кто-нибудь знает, как заставить это работать для целых чисел?
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