在FileHelpers映射类中使用数组

时间:2008-11-04 23:40:07

标签: c# .net csv filehelpers

我一直在寻找一种方法来允许我的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 个答案:

答案 0 :(得分:1)

FileHelpers记录类需要公共字段。记录类不应被视为应遵循最佳编码实践的普通C#类;相反,它只是描述导入文件结构的语法。

使用FileHelpers的推荐过程是循环生成的Example[]数组,并将您需要的字段映射到更正常的类(使用属性而不是公共字段)。此时,您可以将H1-H4值复制到数组属性中。

答案 1 :(得分:0)

我对这个工具一无所知,但是(假设它不是工具的限制)我真的怀疑公共领域的智慧。属性还可以让您有机会填充值:

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