2014-10-31 4 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. –

+0

Потому что я хотел бы иметь список объектов класса. –

ответ

3

Temp придерживается той же ссылки. поэтому внесение изменений на нем изменится 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)) 
Смежные вопросы