0

我正在使用csv readerc#。这是我的Record

internal class Record
{
    int _y;
    int _x;
    [Name("y")]
    public int y { get; set; }
    [Name("x")]
    public int x { get; set; }
    
    public int getSum()
    {
        return _x+_y;
    }
}

然后,我尝试读取多个 .csv 文件并将聚合写入 1 个 .csv 文件

using (var writer = new StreamWriter(SaveTxt.Text))
            using (var csvOut = new CsvWriter(writer, CultureInfo.InvariantCulture))
            {
                for (int i = 0; i < Int16.Parse(numberFile); i++)
                {
                    using (var reader = new StreamReader(files[i]))
                    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                    {
                        var records = csv.GetRecords<Record>();
                        csvOut.WriteRecords(records);
                        
                    }
                }
            }

但结果只显示xy数据。不显示getSum()函数的结果。在写入其他 .csv 之前,我应该怎么做才能操作从 .csv 读取的数据?

4

2 回答 2

1

我相信 CsvReader 正在写 X 和 Y 因为它们是属性;它不会调用方法并将其结果包含在文件中。将 getSum 方法转换为属性,它应该出现在文件中。您可能还必须给它一个名称属性。这是一个固定的 Record 类:

internal class Record
{
    
    
    [Name("y")]
    public int X { get; set; }
    [Name("x")]
    public int Y { get; set; }

    [Optional]
    [Name("sum")]
    public int Sum { get { return X + Y; } set; } }
}

(请注意,在 c# 中,我们编写的属性和方法名称以大写字母开头..)

我删除了你的 _x 和 _y 因为他们什么都没做;它们没有连接到 x 和 y 属性,并且它们的默认值始终为 0,因此将它们用于 sum 也将为 0


您在编写数据之前询问如何操作数据;这两行之间的一些代码:

var records = csv.GetRecords<Record>();

//put code here

csvOut.WriteRecords(records);
于 2020-07-24T05:37:03.853 回答
0

类 Record 应该是问题所在。 GetSum()是一个函数,函数不会被序列化。 x并且y是属性(正如您可以在 { get; set; } 上指出的那样)并将被序列化。您可以将函数更改为这样的属性:

public int GetSum
{
    get
    {
        return _x+_y;
    }
}

下一个问题是_xand_y变量永远不会被设置为一个值。所以GetSum总是返回 0。

于 2020-07-24T05:39:18.587 回答