Получение данных из VB.NET arraylist объектов

Ковбойские кодеры делают больше.

Я провожу свою жизнь в атмосфере стартапа. Без кодеров Cowboy мы бы тратили бесконечные циклы, чтобы убедиться, что все сделано «правильно».

Как мы знаем, в принципе невозможно предвидеть все проблемы. Ковбойский кодер сталкивается с этими проблемами и вынужден решать их гораздо быстрее, чем тот, кто пытается их предвидеть.

Хотя, если вы кодируете Ковбой, у вас должен быть лучший рефакторинг спагетти, прежде чем кто-то другой должен его поддерживать. ;) Лучшие из тех, кого я знаю, используют непрерывный рефакторинг. Они выполняют множество задач, не тратят время на попытки предсказать будущее, и благодаря рефакторингу это становится поддерживаемым кодом.

Процесс всегда мешает хорошему Ковбою, независимо от того, насколько он проворен.

7
задан Peter Mortensen 29 March 2011 в 16:01
поделиться

4 ответа

Поместите следующий код:

Dim AnItemObj As New ItemInfo

внутри цикла, который добавляет AnItemObj в список.

Когда вы добавляете ссылочный тип в список, вы добавляете только ссылку, а не значение.

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

5
ответ дан 7 December 2019 в 10:06
поделиться

Итак, у вас есть:

Dim AnItemObj As New ItemInfo
For ...
    AnItemObj.ItemNo = AFile.RecordId
    AnItemObj.ItemType = temp
    AlList.Add(AnItemObj)
Next

Здесь вы создаете отдельный объект, устанавливаете для него значения и добавляете ссылку на него в свой список. Затем вы изменяете свой ItemInfo и добавляете еще одну ссылку на тот же элемент в свой список

. Вам нужно создать новый объект в каждом цикле, примерно так:

Dim AnItemObj As ItemInfo
For ...
    AnItemObj = New ItemInfo
    AnItemObj.ItemNo = AFile.RecordId
    AnItemObj.ItemType = temp
    AlList.Add(AnItemObj)
Next
1
ответ дан 7 December 2019 в 10:06
поделиться

Вы создание нового экземпляра iteminfo для каждого приращения цикла?

0
ответ дан 7 December 2019 в 10:06
поделиться

Я не вижу вашего полного кода цикла, но полагаю, что причина не в установке AnItemObj на объект New ItemInfo. Таким образом, вы просто изменяете тот же объект и снова добавляете его в список (все элементы в списке указывают на один и тот же объект).

AnItemObj = New ItemInfo()
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
0
ответ дан 7 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: