Использование массива в классе отображения FileHelpers - PullRequest
4 голосов
/ 05 ноября 2008

Я искал способ разрешить одному элементу моего класса отображения FileHelpers быть массив определенной длины.

Например, у меня есть такой класс:

[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?

Ответы [ 2 ]

1 голос
/ 02 ноября 2012

Классы записей FileHelpers требуют открытых полей. Класс записи не следует рассматривать как нормальный класс C #, который должен следовать лучшим практикам кодирования; скорее это просто синтаксис для описания структуры файла импорта.

Рекомендованная процедура с FileHelpers заключается в циклическом прохождении результирующего массива Example[] и сопоставлении необходимых полей с более нормальным классом (со свойствами вместо открытых полей). Теперь вы можете скопировать значения H1-H4 в свойство массива.

0 голосов
/ 05 ноября 2008

Я ничего не знаю об рассматриваемом инструменте, но (при условии, что это не ограничение инструмента), я действительно сомневаюсь в мудрости общественных областей. Свойства также даст вам возможность подбирать значения:

[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;}
...