16

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

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

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

4

10 回答 10

41

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

于 2008-09-29T03:41:00.173 回答
5

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

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

也许在 VB 中也存在同样的事情。

于 2008-09-29T03:33:49.847 回答
3

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

于 2008-09-29T03:39:22.907 回答
2

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

您尚未指定哪种集合,但 CollectionBase 继承的对象中不存在 AddRange

于 2008-09-29T03:43:32.007 回答
2

当使用IList. 但是AddRange方法在Collection. 我想过投射CollectionList,但这是不可能的。

于 2009-08-24T07:24:03.897 回答
1

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

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

这是链接的文档

但是,我会关心的一件事是它是进行浅拷贝还是深拷贝。

于 2008-09-29T03:37:42.070 回答
1

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

于 2008-09-29T03:46:12.440 回答
0

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

于 2008-09-29T03:34:53.823 回答
0

List.CopyTo(T[]); 也许?

http://msdn.microsoft.com/en-us/library/t69dktcd.aspx

于 2008-09-29T03:35:30.577 回答
0

不确定这个

为什么不这样做

    Dim newlines = _singSongs.ToList

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

于 2018-03-10T22:13:06.547 回答