Проблема объекта VB.NET с коллекциями, массивами и списками - PullRequest
2 голосов
/ 18 февраля 2009

У меня есть небольшая программа, в которой я пытался создать коллекции определенного объекта, который я создал (Job).

Независимо от того, использую ли я массив, коллекцию или список, каждый раз, когда я добавляю новый экземпляр объекта в массив / коллекцию / список, он перезаписывает все предыдущие элементы одним и тем же объектом.

Например, допустим, у Job есть только одно свойство name. Если бы в коллекции были рабочие места с именами 1,2,3,4, каждый раз, когда я добавляю отдельную работу, все предыдущие работы получают имя текущей работы. Таким образом, к моменту добавления задания 4 все задания имеют название 4.

Кто-нибудь сталкивался с этой проблемой раньше?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2009

Я подозреваю, что вы добавляете один и тот же экземпляр несколько раз - то есть (здесь я буду использовать 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);

Это потому, что классы являются ссылочными типами; все, что вы добавляете, это ссылка. Структуры являются типами значений и будут работать так, как вы ожидаете, , за исключением , что, если вы не действительно знаете, что делаете, структуры должны быть неизменяемыми (т. Е. После создания не редактируемые свойства). 1011 *

0 голосов
/ 18 февраля 2009

Звучит так, как будто вы повторно используете переменную объекта Job после добавления ее в список, без воссоздания объекта Job. Все элементы в списке будут указывать на этот объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...