【问题标题】:List of lists in vb.netvb.net 中的列表列表
【发布时间】:2014-10-31 10:20:55
【问题描述】:


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

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

但最后我得到了一个Comp 列表,其中充满了Temp 列表,这些列表与添加的最后一个Temp 列表完全相同。
我做错了什么?

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

【问题讨论】:

  • 为什么要使用 List(Of Object)?在我看来,它完全否定了泛型类型的好处。你也可以只使用一个 ArrayList。
  • 因为我想要一个类对象列表。

标签: vb.net list add


【解决方案1】:

Temp 持有相同的引用。所以对其进行更改会改变它。并且您添加和修改相同的列表

 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))

【讨论】:

    【解决方案2】:

    这将起作用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2018-09-21
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      相关资源
      最近更新 更多