将集合项复制到.NET中的另一个集合

时间:2008-09-29 03:31:49

标签: .net vb.net collections

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

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

我的集合是泛型集合,继承自基类 - 集合(Of)

10 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

如果将List2初始化为List1,请不要忘记您将获得引用而不是副本。除非你进行深度克隆,否则你仍然会有一组字符串。

答案 3 :(得分:2)

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

你没有指定什么类型的集合,但CollectionBase继承的对象中不存在AddRange

答案 4 :(得分:2)

当使用IList时,这是可用的。但AddRange中未提供Collection方法。我考虑过将Collection投射到List,但这是不可能的。

答案 5 :(得分:1)

Ben的解决方案确实存在于VB.Net:

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

以下是关联的documentation

然而,我要关注的一件事是它是否做浅拷贝或深拷贝。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

答案 9 :(得分:0)

不确定这个

为什么不这样做呢

    Dim newlines = _singSongs.ToList

那.tolist意味着它会创建一个全新的列表