在 C# 中使用 CsvHelper 编写 class 的列表时输出错误

Wrong output when Write a list of class using CsvHelper in C#

我想将我的 class 导出到 .csv 文件中,我遵循以下评论:

但是当我导出时(在 Buses_Data.Buses_List 中),我有错误的数据输出,所有数据都在同一行:

public void ExportToCSV(Buses_Data classToExport, string filepath)
    {
        try
        {
            if (File.Exists(filepath))
            {
                Console.WriteLine("Le fichier existe");
                System.IO.File.Delete(filepath);
                Console.WriteLine("l'ancien fichier à été supprimé");
            }

            Console.WriteLine("Export :...");


            using (StreamWriter sw = new StreamWriter(filepath))
            using (CsvWriter cw = new CsvWriter(sw))
            {
                cw.WriteHeader<Bus>();

                foreach (Bus emp in classToExport.Buses_List)
                {
                    cw.WriteRecord<Bus>(emp);
                }
            }

            Console.WriteLine("Export CSV: OK");
        }
        catch (Exception i)
        {
            Console.WriteLine("Error ! " + i);
        }
    }

我不知道为什么代码不起作用

编辑: 错误的输出:

右输出(数据不对应)

编辑 2: 我试过这个评论:

using (StreamWriter sw = new StreamWriter(filepath))

            using (CsvWriter cw = new CsvWriter(sw))
            {
                cw.WriteHeader<Bus>();

                foreach (Bus emp in classToExport.Buses_List)
                {

                    cw.WriteRecord<Bus>(emp);
                    sw.NewLine = "\n";
                    cw.NextRecord();
                }
            }

我有更好的结果,但我的 Bus N°1 在第一行,而不是第二行

解决方案:

using (StreamWriter sw = new StreamWriter(filepath))
            using (CsvWriter cw = new CsvWriter(sw))
            {
                cw.WriteHeader<Bus>();
                cw.NextRecord();
                foreach (Bus emp in classToExport.Buses_List)
                {

                    cw.WriteRecord<Bus>(emp);
                    //sw.NewLine = "\n";
                    cw.NextRecord();
                }
            }

你试过了吗CsvWriter.NextRecord

foreach (Bus emp in classToExport.Buses_List)
{
    cw.WriteRecord<Bus>(emp);
    cw.NextRecord();
}

基于 GitHub issue 的回答,由 Josh Close 撰写:

You need to call NextRecord() when you're done writing the header. This is so you can write more fields manually before or after.

我试过了,效果不错