Ответ 1
Вы можете использовать AddRange: hostCollection2.AddRange(hostCollection1)
.
В .NET(VB), как я могу взять все элементы в одной коллекции и добавить их во вторую коллекцию (без потери ранее существовавших элементов во второй коллекции)? Я ищу что-то более эффективное, чем это:
For Each item As Host In hostCollection1
hostCollection2.Add(item)
Next
Мои коллекции - это общие коллекции, унаследованные от базового класса - Collection (Of)
Вы можете использовать AddRange: hostCollection2.AddRange(hostCollection1)
.
Я знаю, что вы просите VB, но на С# вы можете просто использовать конструктор коллекции, чтобы инициализировать его любым IEnumerable. Например:
List<string> list1 = new List<string>();
list1.Add("Hello");
List<string> list2 = new List<string>(list1);
Возможно, в VB существует такая же вещь.
Я всегда использую функцию List<T>.AddRange(otherList<T>)
. Опять же, если это список объектов, они будут ссылаться на одно и то же.
Вы не указали, какая коллекция, однако, AddRange не существует в наследуемых объектах CollectionBase
Решение Ben существует для VB.Net:
Dim collection As IEnumerable(Of T)
Dim instance As New List(collection)
Вот ссылка документация.
Однако, одна вещь, которую я хотел бы затронуть, заключается в том, делает ли она мелкую копию или глубокую копию.
Не забывайте, что вы получите ссылку, а не копию, если вы инициализируете List2 to List1. У вас все еще будет один набор строк, если вы не сделаете глубокий клон.
Это доступно, если вы используете IList
. Но метод AddRange
недоступен в Collection
. Я думал о том, чтобы отбрасывать Collection
в List
, но это невозможно.
Array.Copy
может решить вашу проблему.
List.CopyTo(Т []); может быть?
Если вы не хотите, чтобы обе коллекции модифицировали один и тот же набор объектов, каждый объект должен быть скопирован в кучу. Возможно, вы можете описать свой сценарий, как это влияет на вашу производительность, и мы можем найти хорошее решение.