Ковбойские кодеры делают больше.
Я провожу свою жизнь в атмосфере стартапа. Без кодеров Cowboy мы бы тратили бесконечные циклы, чтобы убедиться, что все сделано «правильно».
Как мы знаем, в принципе невозможно предвидеть все проблемы. Ковбойский кодер сталкивается с этими проблемами и вынужден решать их гораздо быстрее, чем тот, кто пытается их предвидеть.
Хотя, если вы кодируете Ковбой, у вас должен быть лучший рефакторинг спагетти, прежде чем кто-то другой должен его поддерживать. ;) Лучшие из тех, кого я знаю, используют непрерывный рефакторинг. Они выполняют множество задач, не тратят время на попытки предсказать будущее, и благодаря рефакторингу это становится поддерживаемым кодом.
Процесс всегда мешает хорошему Ковбою, независимо от того, насколько он проворен.
Поместите следующий код:
Dim AnItemObj As New ItemInfo
внутри цикла, который добавляет AnItemObj в список.
Когда вы добавляете ссылочный тип в список, вы добавляете только ссылку, а не значение.
Это означает, что если вы добавите 10 раз один и тот же экземпляр в список, он добавит 10 раз одну и ту же ссылку в список. Но если после этого у вас все еще есть ссылка на этот экземпляр, вы можете изменить его свойства, и поскольку все 10 записей в списке указывают на одну и ту же ссылку в памяти, все 10 записей будут изменены.
Итак, у вас есть:
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
Вы создание нового экземпляра iteminfo для каждого приращения цикла?
Я не вижу вашего полного кода цикла, но полагаю, что причина не в установке AnItemObj на объект New ItemInfo. Таким образом, вы просто изменяете тот же объект и снова добавляете его в список (все элементы в списке указывают на один и тот же объект).
AnItemObj = New ItemInfo()
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)