我是F#的新手基本上我正在尝试使用FileHelpers库按记录导入csv记录。所以我可以将每个对象放在一个队列中。
let importOrders (filePath:string) = do
let engine = new FileHelpers.FileHelperAsyncEngine(typeof<DataTypes.Order.OrderType>)
engine.BeginReadFile(filePath)
for o in engine do
unProccessedData.Enqueue(o)
然而,它说引擎不是一个可以枚举其值的类型,但它实现了IEnumerable。任何人对可能的修复或不同的方法有任何建议。
我需要能够按记录处理csv记录,将每个记录转换为orderType,然后将订单存储到队列中。感谢帮助人员
答案 0 :(得分:6)
engine
的类型(称为FileHelperAsyncEngine
)仅实现IEnumerable
的非通用版本,但它不实现通用IEnumerable<T>
F#编译器。
您需要将非泛型IEnumerable
转换为泛型IEnumerable<obj>
(或者通用类型的其他实例化,具体取决于集合中值的类型)。以下应该可以解决问题:
let importOrders (filePath:string) =
let engine = new FileHelpers.FileHelperAsyncEngine(typeof<OrderType>)
engine.BeginReadFile(filePath)
for o in engine |> Seq.cast<obj> do // NOTE: Conversion using Seq.cast
unProccessedData.Enqueue(o)