FileHelpers类型中的字段顺序

时间:2011-05-28 17:48:00

标签: csv f# filehelpers

我正在使用Filehelpers读取一个简单的CSV文件 - 该文件只是一个键值对。 (string,int64)

我为此写的f#类型是:

type MapVal (key:string, value:int64) =
    new()= MapVal("",0L)
    member x.Key = key
    member x.Value = value

我在这里缺少一些基本的东西,但FileHelpers总是假定字段的顺序与我指定的相反 - 如Value,Key。

let dfe = new DelimitedFileEngine(typeof<MapVal>)
let recs = dfe.ReadFile(@"D:\e.dat")
recs |> Seq.length

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

主构造函数参数的顺序不一定确定字段在类型中出现的顺序(事实上,根据参数的使用方式,它们甚至可能不会导致生成字段)。在我看来,FileHelpers不提供使用属性而不是字段的方法这一事实是不可取的。如果您想要更好地控制类的物理布局,则需要明确声明字段:

type MapVal = 
    val mutable key : string
    val mutable value : int64
    new() = { key = ""; value = 0L }
    new(k, v) = { key = k; value = v }
    member x.Key = x.key
    member x.Value = x.value

答案 1 :(得分:3)

库使用声明中字段的顺序,但看起来F#字不同,在库的最后一个稳定版本中你可以使用[FieldOrder(1)]属性来提供顺序字段。

http://teamcity.codebetter.com/viewLog.html?buildId=lastSuccessful&buildTypeId=bt66&tab=artifacts&guest=1

干杯