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

时间:2020-03-06 14:51:33  来源:igfitidea点击:

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

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

我的集合是从基类-Collection(Of)继承的通用集合。

解决方案

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

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

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

Array.Copy可能会解决问题。

List.CopyTo(T []);可能是?

http://msdn.microsoft.com/zh-CN/library/t69dktcd.aspx

Ben的解决方案确实适用于VB.Net:

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

这是链接的文档。

但是,我要考虑的一件事是它是浅拷贝还是深拷贝。

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

我们可以使用AddRange:hostCollection2.AddRange(hostCollection1)

我总是使用List &lt;T> .AddRange(otherList &lt;T>)函数。同样,如果这是对象列表,则它们将引用同一对象。

我们尚未指定哪种收集方式,AddRange在CollectionBase继承的对象中不存在

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

当一个人使用" IList"时可以使用。但是AddRange方法在Collection中不可用。我曾考虑将Collection强制转换为List,但这是不可能的。