将集合项目复制到.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 <T> .AddRange(otherList <T>)
函数。同样,如果这是对象列表,则它们将引用同一对象。
我们尚未指定哪种收集方式,AddRange在CollectionBase继承的对象中不存在
除非我们希望两个集合都修改同一组对象,否则每个对象都必须复制到堆中。也许我们可以描述一下这如何影响性能的情况,我们可以找到一个好的解决方案。
当一个人使用" IList"时可以使用。但是AddRange
方法在Collection
中不可用。我曾考虑将Collection
强制转换为List
,但这是不可能的。