2014-10-31 126 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))