Я создавал новый объект в цикле и добавлял этот объект в коллекцию; но когда я читал назад коллекцию, она всегда была полностью заполнена последним объектом, который я добавил. Я придумал два способа обойти это, но я просто не понимаю, почему моя первоначальная реализация была неправильной.
Оригинал:
Dim oItem As Variant
Dim sOutput As String
Dim i As Integer
Dim oCollection As New Collection
For i = 0 To 10
Dim oMatch As New clsMatch
oMatch.setLineNumber i
oCollection.Add oMatch
Next
For Each oItem In oCollection
sOutput = sOutput & "[" & oItem.lineNumber & "]"
Next
MsgBox sOutput
Это привело к тому, что каждая строка была равна 10; Я, очевидно, не создавал новые объекты, но вместо этого использовал один и тот же цикл через цикл, несмотря на то, что объявление было внутри цикла.
Итак, я добавил Set oMatch = Nothing
непосредственно перед строкой Next
, и это устранило проблему, теперь она была от 0 до 10. Так что если старый объект был явно уничтожен, то он был готов создать новый? Я бы подумал, что следующая итерация в цикле заставит все, что объявлено в цикле, уничтожить из-за объема?
Любопытно, я попробовал другой способ объявления нового объекта: Dim oMatch As clsMatch: Set oMatch = New clsMatch
. Это также приводит к 0-10.
Может кто-нибудь объяснить мне, почему первая реализация была неправильной?