我是新手,这是我的第一个问题,请原谅我的解释中的任何误解。
我正在尝试将数据从csv文件导入到我定义的对象列表中。 我的文件有2列5行:1表示日期,1表示当天销售的产品数量。 我的应用程序读取文件,将数据存储在2个列表中(1表示日期listDate,1表示销售量列表卷),然后将这两个数据合并到一个新对象mySale中,并将该对象添加到最终列表Car中。 只要我逐行将mySale添加到Car(下面的代码中的OPTION 1),但是当尝试使用循环(for语句)时,我总是最终将我的最终列表填充到最后一行文件(下面代码中的选项2)。 在调试期间,我可以在mySale中查看属性日期正确,然后将其添加到Car中,但是一旦循环结束,结果似乎已更改:-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; }
}
}
答案 0 :(得分:2)
mySales
是一个类,它是一个引用类型。在选项2中,您正在执行以下操作:
mySale
,现在是对mySales
的特定实例的引用。for
循环中,您修改mySale
(仍然是对该完全相同的实例的引用),然后将此相同的实例添加到列表的末尾。最后,当您多次添加mySale
时,您会有一个列表,其中包含对同一实例的多个引用。
您可能想要做的是定义并实例化mySale
循环内的for
,而不是外部。