2008-09-29 23 views
14

En .NET (VB), ¿cómo puedo tomar todos los elementos en una colección y agregarlos a una segunda colección (sin perder elementos preexistentes en la segunda colección) ? Estoy buscando algo un poco más eficiente que esto:Copiar elementos de colección a otra colección en .NET

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

Mis colecciones son colecciones genéricas, heredado de la clase base - Collection (De)

Respuesta

32

Puede usar AddRange: hostCollection2.AddRange(hostCollection1).

+2

'AddRange' no es un miembro de 'Colección'. –

4

Sé que estás pidiendo VB, pero en C# puedes usar el constructor de la colección para inicializarlo con cualquier IEnumerable. Por ejemplo:

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

Quizás exista el mismo tipo de cosas en VB.

+0

Pero artículos en lista2 se pre-existente se pierde? Estoy tratando de agregar a la segunda colección, no exactamente duplicar la primera colección. –

+0

Oh, lo siento, lo malentendí. En ese caso, usaría el método AddRange en mi objeto list2. –

+0

Acaba de agregar a su publicación que está utilizando la clase de colección básica.En este caso, ninguna de las soluciones AddRange funcionará. Si está usando .NET 3.5, podríamos ir a la ruta del método de extensión ... –

0

Array.Copy puede resolver su problema.

1

solución de Ben existe para VB.Net:

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

Aquí es el documentation vinculado.

Sin embargo, una cosa que me preocuparía es si es o no una copia superficial o una copia profunda.

2

No olvide que obtendrá una referencia y no una copia si inicializa su List2 a List1. Todavía tendrá un conjunto de cadenas a menos que haga un clon profundo.

2

Siempre uso la función List<T>.AddRange(otherList<T>). De nuevo, si esta es una lista de objetos, serán referencias de la misma cosa.

No ha especificado qué tipo de colección, sin embargo, AddRange no existe en CollectionBase objetos heredados

1

A menos que desee ambas colecciones de modificar el mismo conjunto de objetos, cada objeto se va a tener que ser copiado al Heap. Tal vez pueda describir su escenario de cómo esto está afectando su rendimiento y podemos encontrar una buena solución.

1

Esto está disponible cuando uno usa un IList. Pero el método AddRange no está disponible en Collection. Pensé en convertir Collection en List, pero no es posible.

0
No

seguro para éste

¿Por qué no hacer esto

Dim newlines = _singSongs.ToList 

Eso significa que .tolist crea una lista nueva

Cuestiones relacionadas