使用循环将数据从 csv 文件添加到列表中

本文关键字:添加 文件 列表 csv 循环 数据 | 更新日期: 2023-09-27 17:56:59

我是开发新手,这是我的第一个问题,所以请原谅我的解释中的任何误解。

正在尝试将数据从csv文件导入到我定义的对象列表中。我的文件有 2 列和 5 行:1 表示日期,1 表示当天销售的产品数量。我的应用程序读取文件,将数据存储在 2 个列表中(1 个用于日期列表日期,1 个用于销售量列表Volume),然后将这两个数据合并到一个新对象 mySale 中,并将该对象添加到最终列表 Car.只要我逐行将mySale添加到Car(以下代码中的选项1),它就可以正常工作,但是当尝试使用循环(for语句)时,我总是最终使用文件的最后一行填充我的最终列表(下面的代码中的选项2)。在调试期间,我可以在将卷添加到 Car 之前在 mySale 中看到卷的属性日期是正确的,但是一旦循环完成,结果似乎已更改:-s我有以下代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace dataManip
{
    class Program
    {
        static void Main(string[] args)
        {
            var reader = new StreamReader(File.OpenRead(@"C:'sales.csv"));
            List<DateTime> listDate = new List<DateTime>();
            List<int> listVolume = new List<int>();
            List<mySales> Car = new List<mySales>();
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(',');
                listDate.Add(Convert.ToDateTime(values[0]));
                listVolume.Add(Convert.ToInt32(values[1]));
            }
            mySales mySale = new mySales();
            //OPTION 1
            mySale.date = listDate[3];
            mySale.volume = listVolume[3];
            Car.Add(mySale);

            //OPTION 2
            for (int i = 0; i < listDate.Count(); i++)
            {
                mySale.date = listDate[i];
                mySale.volume = listVolume[i];
                Car.Add(mySale);
            }
                foreach (int p in listVolume)
                Console.WriteLine(p);
                Console.WriteLine("'n"+Car[0].volume);
                Console.ReadLine();
    }
    }
    class mySales
    {
        public DateTime date { get; set; }
        public int volume { get; set; }
    }
}

使用循环将数据从 csv 文件添加到列表中

mySales是一个类,它是一个引用类型。在选项 2 中,您将执行以下操作:

  1. 您创建 mySale ,它现在是对 mySales 的特定实例的引用。
  2. for 循环中,修改mySale(它仍然是对该完全相同实例的引用),然后将此同一实例添加到列表末尾。

因此,最后,当您多次添加mySale时,您将拥有一个包含对同一实例的多个引用的列表。

您可能想要做的是在 for 循环内部而不是外部定义和实例化mySale