【问题标题】:VB.NET Object Problem with Collections, Arrays and Lists集合、数组和列表的 VB.NET 对象问题
【发布时间】:2010-10-08 05:40:15
【问题描述】:

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

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

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

以前有人遇到过这个问题吗?

【问题讨论】:

  • 我很确定你做错了什么,那一段代码呢?

标签: .net vb.net arrays collections object


【解决方案1】:

我怀疑您多次添加同一个实例 - 即(我将在此处使用 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);

这是因为类是引用类型;您添加的只是参考。结构是值类型,并且会像你期望的那样工作,除了除非你真的知道你在做什么,否则结构应该是不可变的(即一旦创建就没有可编辑的属性) .

【讨论】:

  • 我还以为发生了这样的事情!非常感谢您的回答,为我省了很多麻烦。
【解决方案2】:

听起来好像您在将 Job 对象变量添加到列表后重用它,而没有重新创建 Job 对象。列表中的所有项目都将指向该对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 2021-07-19
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多