Я пользуюсь превосходной библиотекой FileHelpers для обработки файла расписания авиакомпании фиксированной длины.
У меня есть поле даты, затем несколько полей позже в записи, поле времени.
Я хочу объединить оба из них в классе записи FileHelpers и знать, что существует пользовательское FieldConverter
атрибут. С этим атрибутом Вы обеспечиваете пользовательскую функцию для обработки полевых данных и реализации StringToField
и FieldToString
.
Мой вопрос: я уже могу передать другие поля (чтение) этому клиенту FieldConverter
также, таким образом, я могу объединить Дату и время вместе. FieldConverter
имеет реализацию, которая позволяет Вам обращаться к пользовательскому классу обработки И К 'другим строкам' или даже массиву объекта. Но, учитывая это сделан в определении атрибута, я изо всех сил пытаюсь получить доступ к этой более ранней ссылке поля.
[FieldFixedLength(4)]
[FieldConverter(typeof(MyTimeConverter),"eg. ScheduledDepartureDate")]
public DateTime scheduledDepartureTime;
На самом деле вы можете получить доступ к предыдущим полям, потому что они считываются по порядку, но могут быть немного странными для других, читающих код.
Может быть, вы можете реализовать интерфейс 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)
}
Надеюсь, что это помощники
Cheers