如何将 IList<IList<Object>> 转换为 F# 中特定类型的列表

How to Cast IList<IList<Object>> to list of specific type in F#

我在寻找如何将字符串数组转换为特定类型时遇到了一些问题。 这是我的代码

type plItem = {
    sku: string
    name: string
    size: string
    buy: decimal
    sell: decimal
    barcode: string
}
// ....  ( get values from google sheets ) 
let values:IList<IList<Object>> = response.Values
let pl = values |> Seq.map ( fun item -> Seq.toArray )

在代码的末尾 - pl 现在是一个字符串数组。我想让它成为(以上)plItem 类型的数组我不确定最简单的方法。

如果我对问题的理解正确,你有一个列表列表,其中外部列表​​代表行,嵌套列表代表列。您想将行变成记录,而列对应于各个记录字段。

没有自动执行此操作的方法。您只需提取单独的列并将它们转换为适当的类型(通过将类型拆箱为 string 或获取字符串值然后解析它)。像这样:

open System
open System.Collections.Generic

type plItem = {
  sku: string
  name: string
  size: string
  buy: decimal
  sell: decimal
  barcode: string
}

let values:IList<IList<Object>> = 
  [| [| box "12660"; box "Probiotics 14 Strains"; box "60 VCaps"; 
        box "31.46"; box "50.35"; box "9403067126606"; |] :> IList<_> 
  |] :> IList<_>

let pl = values |> Seq.map (fun row -> 
  { sku = unbox row.[0]
    name = unbox row.[1]
    size = unbox row.[2]
    buy = decimal (unbox<string> row.[3])
    sell = decimal (unbox<string> row.[4])
    barcode = unbox row.[5] })