4

FileHelpers マッピング クラスの 1 つの要素を特定の長さの配列にできるようにする方法を探していました。

たとえば、次のようなクラスがあります。

[DelimitedRecord(",")]
public class Example
{
    public string code;
    public int month;
    public int day;
    public double h1;
    public double h2;
    public double h3;
    public double h4;
}

値 h1-h4 は、単純に「h」と呼ばれる配列の方が実際には意味があります。ファイルの処理も少し簡単になります。また、私が読んでいるファイルには常にこれらのフィールドがあり、これらのフィールドのみが含まれていることも知っています。

FileHelper マッピング クラスに配列を含める方法を見つけた人はいますか?

4

2 に答える 2

1

FileHelpers レコード クラスには public フィールドが必要です。レコード クラスは、ベスト コーディング プラクティスに従う必要がある通常の C# クラスと見なされるべきではありません。むしろ、インポート ファイルの構造を記述するための単なる構文です。

FileHelpers で推奨される手順は、結果のExample[]配列をループして、必要なフィールドをより通常のクラス (パブリック フィールドではなくプロパティを使用) にマップすることです。この時点で、代わりに H1 ~ H4 の値を配列プロパティにコピーできます。

于 2012-11-02T00:51:31.023 に答える
0

問題のツールについては何も知りませんが、(それがツールの制限ではないと仮定して) public フィールドの賢明さを本当に疑っています。プロパティを使用すると、値をシムする機会も得られます。

[DelimitedRecord(",")]
public class Example
{
    public string Code {get;set;}
    public int Month {get;set;}
    public int Day {get;set;}

    private readonly double[] h = new double[4];

    public double H1 {get {return h[0];} set {h[0] = value;}}
    public double H2 {get {return h[1];} set {h[1] = value;}}
    public double H3 {get {return h[2];} set {h[2] = value;}}
    public double H4 {get {return h[3];} set {h[3] = value;}}
}

繰り返しますが、ツールがこれをサポートするかどうかはわかりませんが、実行可能な実装方法になるでしょう。もちろん、「h」値は、直接のメンバーと同じように機能します (実際には、わずかに効率的です。ヒープに配列がなく、逆参照もありません)。

    public double H1 {get;set;}
    public double H2 {get;set;}
    public double H3 {get;set;}
    public double H4 {get;set;}
于 2008-11-05T06:46:57.640 に答える