2014-10-31 72 views
0


我想创建列表,然后插入到另一个列表中。 由于某种原因,后面的列表在每次尝试向其中添加新列表项时都会被覆盖。

对于以下代码,首先我要将项目添加到Temp列表中,并且在满足某些条件后,将Temp列表作为项目添加到Comp列表中。之后,循环重复,新的和不同的Temp列表应创建并添加到Comp列表作为下一项。所以Comp列表中的每个项目应该是不同的。

但最终我得到一个Comp列表,填写Temp列表,这些列表都与最后添加的Temp列表完全相同。
我在做什么错?列表vb.net列表

Function UniqueValueList2(ByVal InputObject As List(Of Object)) As List(Of List(Of Object)) 
    Dim vc As Integer = InputObject.Count 
    Dim i As Integer = 1 
    Dim Temp As New List(Of Object) 
    Dim Comp As New List(Of List(Of Object)) 

    Dim CurrentObj As String 
    Dim PrevObj As String 

    Temp.Add(InputObject(0)) 

    Do While i < vc 
     CurrentObj = InputObject(i).fieldName 
     PrevObj = InputObject(i-1).fieldName 

     If CurrentObj = PrevObj Then 
      Temp.Add(InputObject(i)) 
     Else 
      Comp.Add(Temp) 
      Temp.Clear() 
      Temp.Add(InputObject(i)) 
     End If 
     i = i + 1 
    Loop 
    Comp.Add(Temp) 
    UniqueValueList2 = Comp 
End Function 
+0

为什么要使用列表(对象)?在我看来,它完全否定了泛型类型的好处。你也可以使用一个ArrayList。 – 2014-10-31 13:33:56

+0

因为我想要一个类对象的列表。 – 2014-11-02 08:04:43

回答

3

温度持有相同的参考。这样就可以进行更改会改变it.And您添加和修改同一个列表

Comp.Add(Temp) 'the same Temp List 
Temp.Clear() 'You will clear the same List 
Temp.Add(InputObject(i)) 

所以,你应该怎么做:

Comp.Add(Temp) 'we add old List 
Temp=New List(Of Object) 'Temp now holds reference to new List 
Temp.Add(InputObject(i)) 
1

这将工作:

Comp.Add(Temp.ToList()) 
Temp.Clear() 
Temp.Add(InputObject(i))