我有一个小程序,我一直在尝试创建我创建的特定对象的集合(Job)。
无论我是使用数组,集合还是列表,每次我将对象的新实例添加到数组/集合/列表时,它都会覆盖具有相同对象的所有先前项目。
例如,假设Job只有一个属性name。如果我在一个集合中使用名称为1,2,3,4的Jobs,那么每次添加单个作业时,所有以前的作业都会获得当前作业的名称。所以当我添加作业4时,所有作业的名称都是4。
之前有没有人遇到过这个问题?
答案 0 :(得分:2)
我怀疑你是多次添加同一个实例 - 即(我将在这里使用C#...)
Job job = new Job();
job.Name = "a";
list.Add(job);
job.Name = "b";
list.Add(job);
您所做的是将2个对同一对象的引用添加到列表中。你应该做的是:
Job job = new Job();
job.Name = "a";
list.Add(job);
job = new Job(); /// <<===== here
job.Name = "b";
list.Add(job);
这是因为类是引用类型;你要添加的只是一个参考。结构是值类型,并且会像你期望的那样工作,除了,除非你真的知道你在做什么,结构应该是不可变的(即一旦创建就没有可编辑的属性)
答案 1 :(得分:0)
听起来好像是在将Job对象变量添加到列表后重新使用Job对象变量,而不重新创建Job对象。列表中的所有项目都将指向此对象。