F# - 我可以将 Seq.map 应用于 System.DataSet.DataTableCollection 吗?

F# - can I apply Seq.map to System.DataSet.DataTableCollection?

这里有一些看起来应该起作用但不起作用的东西:

let dataSet = new DataSet()
let dataTable1 = dataSet.Tables.Add("Bob")
let dataTable1 = dataSet.Tables.Add("Bilf")
let tableNames = Seq.map (fun (x:DataTable) -> x.TableName) dataSet.Tables

它给出了以下错误:

The type 'DataTableCollection' is not compatible with the type 'seq<DataTable>'

尝试手动投射时仍然存在相同的错误:

let tableNames = Seq.map (fun (x:DataTable) -> x.TableName) (seq<DataTable> dataSet.Tables)

是否有任何方法可以对 DataTableCollection 执行 F# 样式的序列操作,或者是否需要先手动将 DataTableCollection 转换为 F# 认可的集合类型?

您正在寻找 Seq.cast,它正是您所寻找的 - 从 IEnumerable 转换为 IEnumerable<'t>

dataSet.Tables
|> Seq.cast<DataTable>
|> Seq.map (fun x -> x.TableName)