使用循环将数据从 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; }
}
}
mySales
是一个类,它是一个引用类型。在选项 2 中,您将执行以下操作:
- 您创建
mySale
,它现在是对mySales
的特定实例的引用。 - 在
for
循环中,修改mySale
(它仍然是对该完全相同实例的引用),然后将此同一实例添加到列表末尾。
因此,最后,当您多次添加mySale
时,您将拥有一个包含对同一实例的多个引用的列表。
您可能想要做的是在 for
循环内部而不是外部定义和实例化mySale
。