3

Filehelpersを使用して単純なCSVファイルを読んでいます。ファイルは単なるキーと値のペアです。(文字列、int64)

これのために私が書いたf#タイプは次のとおりです。

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

ここで基本的なものが欠けていますが、FileHelpersは常に、フィールドの順序が、値、キーのように、指定したものと逆であると想定しています。

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 に答える