3

我正在使用 Filehelpers 读取一个简单的 CSV 文件——该文件只是一个键值对。(字符串,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

我在这里想念什么?

4

2 回答 2

5

主要构造函数参数的顺序不一定决定字段在类型中出现的顺序(实际上,取决于参数的使用方式,它们甚至可能不会导致生成字段)。在我看来,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
于 2011-05-28T18:39:19.863 回答
3

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

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

干杯

于 2011-05-30T01:14:28.170 回答