带有集合,数组和列表的VB.NET对象问题

时间:2009-02-17 23:36:51

标签: .net vb.net arrays collections object

我有一个小程序,我一直在尝试创建我创建的特定对象的集合(Job)。

无论我是使用数组,集合还是列表,每次我将对象的新实例添加到数组/集合/列表时,它都会覆盖具有相同对象的所有先前项目。

例如,假设Job只有一个属性name。如果我在一个集合中使用名称为1,2,3,4的Jobs,那么每次添加单个作业时,所有以前的作业都会获得当前作业的名称。所以当我添加作业4时,所有作业的名称都是4。

之前有没有人遇到过这个问题?

2 个答案:

答案 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对象。列表中的所有项目都将指向此对象。