Public Module Module1
Public objDictionary As New Dictionary(Of String, ArrayList)
End Module
Dim i As Integer
Dim j As Integer
Dim temp As New ArrayList
For j = 0 To (objCreater.RowCount - 2)
i = 1
temp.Clear()
For i = 1 To 4 'Marker 1 for comments
If i = 4 Then
temp.Insert(i - 1, New ArrayList())
Else
temp.Insert(i - 1, Convert.ToInt32(objCreater.Rows(j).Cells(i).Value))
End If
Next
objDictionary.Add(objCreater.Rows(j).Cells(0).Value, temp) 'Marker 2 for comments
Next
Когда код Above выполняется на каждой итерации, каждый ключ, связанный с переменной temp, изменяется.
Так что, если, например, ваш ввод выглядит так: http://imgur.com/yWDo1
"green",3,2,1">
в непосредственном режиме
? objDictionary ("red") на первом проходе цикла For j = 0 даст ожидаемое.
?objDictionary("red")
Count = 4
(0): 1 {Integer}
(1): 2 {Integer}
(2): 3 {Integer}
(3): Count = 0
Однако на втором проходе значение? ObjDictionary ("red") изменяется по мере изменения временного ArrayList.
? ObjDictionary ("red") у маркера 1
?objDictionary("red")
Count = 0
? ObjDictionary ("red") у маркера 2
?objDictionary("red")
Count = 4
(0): 3 {Integer}
(1): 2 {Integer}
(2): 1 {Integer}
(3): Count = 0
Другими словами, значения последней использованной строки хранятся в каждой комбинации словаря и значения. Как вы предотвращаете это? Это явно связано с использованием временной переменной, так как словарь изменяется при изменении временной переменной. Есть ли способ только скопировать значения из массива, а не связать словарь с изменяющимися значениями массива?