在.NET(VB)中,如何獲取一個集合中的所有項目,並將它們添加到第二個集合中(而不會丟失第二個集合中的預先存在的項目) ?我在尋找的東西一點點比這更有效:將收集項目複製到.NET中的另一個集合中
For Each item As Host In hostCollection1
hostCollection2.Add(item)
Next
我的集合是泛型集合,從基類繼承 - 集(中)
在.NET(VB)中,如何獲取一個集合中的所有項目,並將它們添加到第二個集合中(而不會丟失第二個集合中的預先存在的項目) ?我在尋找的東西一點點比這更有效:將收集項目複製到.NET中的另一個集合中
For Each item As Host In hostCollection1
hostCollection2.Add(item)
Next
我的集合是泛型集合,從基類繼承 - 集(中)
您可以使用AddRange:hostCollection2.AddRange(hostCollection1)
。
我知道你要問的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 []);也許?
Ben的解決方案併爲VB.Net存在:
Dim collection As IEnumerable(Of T)
Dim instance As New List(collection)
這裏是連接documentation。
但是,我會關心的一件事是它是否執行淺拷貝或深拷貝。
不要忘記,如果將List2初始化爲List1,您將獲得參考而不是副本。除非進行深度克隆,否則您仍然會有一組字符串。
我總是使用List<T>.AddRange(otherList<T>)
函數。再次,如果這是一個對象列表,它們將引用相同的事物。
您還沒有指定什麼樣採集不過,的AddRange不存在CollectionBase的繼承的對象
除非你想兩個集合修改同一對象的集合,然後每個對象將不得不被複制到堆。也許你可以描述你的情況如何影響你的表現,我們可以找到一個好的解決方案。
當人們使用IList
時可用。但AddRange
方法不適用於Collection
。我想鑄造Collection
到List
,但它是不可能的。
不知道這一個
爲什麼不只是這樣做
Dim newlines = _singSongs.ToList
這.tolist意味着它創建了一個全新的列表
但預先存在將在列表2項會丟失?我試圖添加到第二個集合,不完全重複的第一個集合。 – 2008-09-29 03:36:41
對不起,我誤解了。在這種情況下,我會在我的list2對象上使用AddRange方法。 – 2008-09-29 03:42:07