我正在使用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
我在这里缺少什么?
答案 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)]属性来提供顺序字段。
干杯