代码之家  ›  专栏  ›  技术社区  ›  Matt Hanson

将集合项复制到.NET中的其他集合

  •  15
  • Matt Hanson  · 技术社区  · 18 年前

    在.NET(VB)中,如何获取一个集合中的所有项,并将它们添加到第二个集合中(而不丢失第二个集合中的现有项)?我在找比这更有效率的东西:

    For Each item As Host In hostCollection1
        hostCollection2.Add(item)
    Next
    

    我的集合是泛型集合,从基类继承--集合(属于)

    10 回复  |  直到 8 年前
        1
  •  33
  •   jop    18 年前

    您可以使用addrange: hostCollection2.AddRange(hostCollection1) .

        2
  •  4
  •   Ben Hoffstein    18 年前

    我知道您要的是VB,但是在C中,您可以使用集合的构造函数用任何IEnumerable初始化它。例如:

    List<string> list1 = new List<string>();
    list1.Add("Hello");
    List<string> list2 = new List<string>(list1);
    

    也许同样的东西也存在于VB中。

        3
  •  2
  •   David Robbins    18 年前

    别忘了,如果将list2初始化为list1,您将得到一个引用,而不是一个副本。除非进行深度克隆,否则仍然有一组字符串。

        4
  •  2
  •   johnc    18 年前

    我总是用 List<T>.AddRange(otherList<T>) 功能。同样,如果这是一个对象列表,它们将被引用相同的东西。

    但尚未指定集合的类型,在CollectionBase继承的对象中不存在AddRange

        5
  •  2
  •   Siddharth Rout    14 年前

    当一个人使用 IList . 但是 AddRange 方法在中不可用 Collection . 我想到了铸造 收藏 到 List 但这是不可能的。

        6
  •  1
  •   Austin Salonen gmlacrosse    18 年前

    对于vb.net,Ben的解决方案确实存在:

    Dim collection As IEnumerable(Of T)    
    Dim instance As New List(collection)
    

    这是链接的 documentation .

    然而,我会关心的一件事是,它是浅拷贝还是深拷贝。

        7
  •  1
  •   Cory Foy    18 年前

    除非您希望两个集合都修改同一组对象,否则每个对象都必须复制到堆中。也许您可以描述一下您的场景,说明这是如何影响您的性能的,我们可以找到一个好的解决方案。

        8
  •  0
  •   Aaron Powell    18 年前
        9
  •  0
  •   Siddharth Rout    14 年前

    Array.Copy 可以解决你的问题。

        10
  •  0
  •   user4951    8 年前

    这个不太确定

    为什么不这么做呢

        Dim newlines = _singSongs.ToList
    

    tolist意味着它创建了一个全新的列表