Скопируйте элементы коллекции в другую коллекцию в .NET.

В .NET(VB), как я могу взять все элементы в одной коллекции и добавить их во вторую коллекцию (без потери ранее существовавших элементов во второй коллекции)? Я ищу что-то более эффективное, чем это:

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

Мои коллекции - это общие коллекции, унаследованные от базового класса - Collection (Of)

Ответы

Ответ 1

Вы можете использовать AddRange: hostCollection2.AddRange(hostCollection1).

Ответ 2

Я знаю, что вы просите VB, но на С# вы можете просто использовать конструктор коллекции, чтобы инициализировать его любым IEnumerable. Например:

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

Возможно, в VB существует такая же вещь.

Ответ 3

Я всегда использую функцию List<T>.AddRange(otherList<T>). Опять же, если это список объектов, они будут ссылаться на одно и то же.

Вы не указали, какая коллекция, однако, AddRange не существует в наследуемых объектах CollectionBase

Ответ 4

Решение Ben существует для VB.Net:

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

Вот ссылка документация.

Однако, одна вещь, которую я хотел бы затронуть, заключается в том, делает ли она мелкую копию или глубокую копию.

Ответ 5

Не забывайте, что вы получите ссылку, а не копию, если вы инициализируете List2 to List1. У вас все еще будет один набор строк, если вы не сделаете глубокий клон.

Ответ 6

Это доступно, если вы используете IList. Но метод AddRange недоступен в Collection. Я думал о том, чтобы отбрасывать Collection в List, но это невозможно.

Ответ 7

Array.Copy может решить вашу проблему.

Ответ 9

Если вы не хотите, чтобы обе коллекции модифицировали один и тот же набор объектов, каждый объект должен быть скопирован в кучу. Возможно, вы можете описать свой сценарий, как это влияет на вашу производительность, и мы можем найти хорошее решение.