10

優れたFileHelpersライブラリを使用して、固定長の航空会社のスケジュールファイルを処理しています。

日付フィールドがあり、その後、レコードのいくつかのフィールドである時間フィールドがあります。

FileHelpersレコードクラスでこれらの両方を組み合わせたいのですが、カスタムFieldConverter属性があることを知っています。この属性を使用して、フィールドデータを処理し、およびを実装するためのカスタム関数を提供しStringToFieldますFieldToString

私の質問は、他のフィールド(すでに読んだもの)をこの顧客にFieldConverterも渡すことができるので、日付と時刻を組み合わせることができます。FieldConverterカスタム処理クラスと「その他の文字列」の両方、またはオブジェクトの配列を参照できるようにする実装があります。しかし、これが属性定義で行われていることを考えると、私はこの以前のフィールドの参照にアクセスするのに苦労しています。

[FieldFixedLength(4)]  
[FieldConverter(typeof(MyTimeConverter),"eg. ScheduledDepartureDate")]  
public DateTime scheduledDepartureTime;
4

1 に答える 1

5

実際、前のフィールドは順番に読み取られるためアクセスできますが、他のコードを読み取る場合は少し奇妙になる可能性があります。

おそらく、インターフェイス INotifyRead を実装し、メソッド AfterRead ですべてのことを行うことができます

クラスは次のようにする必要があります。

public class YourRecord

...

[FieldFixedLength(6)]  
public string scheduledDepartureDate;

[FieldFixedLength(4)]  
public string scheduledDepartureTime;

[FieldIgnored]  
public DateTime scheduledDepartureDateTime;

public void AfterRead(EngineBase engine, string line)
{
    scheduledDepartureDateTime = CombineDateTime(scheduledDepartureDate, scheduledDepartureTime)                 
}

このヘルパーを願っています

乾杯

于 2010-03-26T11:34:57.630 に答える