2008-09-29 74 views
14

在.NET(VB)中,如何獲取一個集合中的所有項目,並將它們添加到第二個集合中(而不會丟失第二個集合中的預先存在的項目) ?我在尋找的東西一點點比這更有效:將收集項目複製到.NET中的另一個集合中

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

我的集合是泛型集合,從基類繼承 - 集(中)

回答

32

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

4

我知道你要問的VB,但在C#中,只需使用集合的構造函數就可以使用任何IEnumerable對其進行初始化。例如:

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

也許在VB中存在同樣的東西。

+0

但預先存在將在列表2項會丟失?我試圖添加到第二個集合,不完全重複的第一個集合。 – 2008-09-29 03:36:41

+0

對不起,我誤解了。在這種情況下,我會在我的list2對象上使用AddRange方法。 – 2008-09-29 03:42:07

0

Array.Copy可能會解決您的問題。

1

Ben的解決方案併爲VB.Net存在:

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

這裏是連接documentation

但是,我會關心的一件事是它是否執行淺拷貝或深拷貝。

2

不要忘記,如果將List2初始化爲List1,您將獲得參考而不是副本。除非進行深度克隆,否則您仍然會有一組字符串。

2

我總是使用List<T>.AddRange(otherList<T>)函數。再次,如果這是一個對象列表,它們將引用相同的事物。

您還沒有指定什麼樣採集不過,的AddRange不存在CollectionBase的繼承的對象

1

除非你想兩個集合修改同一對象的集合,然後每個對象將不得不被複制到堆。也許你可以描述你的情況如何影響你的表現,我們可以找到一個好的解決方案。

1

當人們使用IList時可用。但AddRange方法不適用於Collection。我想鑄造CollectionList,但它是不可能的。

0

不知道這一個

爲什麼不只是這樣做

Dim newlines = _singSongs.ToList 

這.tolist意味着它創建了一個全新的列表

相關問題