2012-03-25 78 views
2

我是F#的新手,基本上我试图使用FileHelpers库通过记录导入csv记录。所以我可以将每个对象放入一个队列中。F#处理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,然后将订单存储到队列中。感谢您的帮助球员

回答

6

类型的engine(被称为FileHelperAsyncEngine)仅实现的IEnumerable非通用版本,但它没有实现它是由F#编译器所需的通用IEnumerable<T>

您需要将非泛型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) 
+0

完美! :)这非常有道理。干杯! – Abstract 2012-03-25 12:30:28