如果使用占位符变量,vb.net字典会更改值

时间:2012-03-16 23:28:45

标签: vb.net variables dictionary

    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

input form.  Input is "red",1,2,3 <new row> "green",3,2,1

立即模式 ?对于j = 0循环的第一次传递,objDictionary(“red”)将给出预期的。

?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

换句话说,所使用的最后一行的值存储在每个键值字典组合中。你如何防止这种情况发生?它显然与temp变量的使用有关,因为字典随着temp变量的变化而变化。有没有办法只复制数组中的值,而不是将字典与数组的更改值相关联?

1 个答案:

答案 0 :(得分:1)

如您所料,您指向所有插入的同一个数组。

这意味着每当您进行更改时,每个条目都会受到影响。

解决方案是每次迭代都将temp指向新的ArrayList - 即。将来电替换为temp.clear()

temp = new ArrayList