Pregunta

Hola Estoy tratando de agregar 1 lista a otra. Lo he hecho usando AddRange() antes, pero no parece estar funcionando aquí ... Aquí está el código:

IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);                
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId);
resultCollection.ToList().AddRange(resultCollection2);

Lo hice depuración para comprobar los resultados, esto es lo que tengo: resultCollection tiene una cuenta de 4 resultCollection2 tiene una cuenta de 6, y después de la adición de la gama, resultCollection todavía sólo tiene una cuenta de 4, cuando debería tener un recuento de 10.

Puede alguien ver lo que estoy haciendo mal? Cualquier ayuda es apreciada.

Gracias,
Matt

¿Fue útil?

Solución

Cuando se llama a ToList() no está envolviendo la colección en un List<T> va a crear un nuevo List<T> con los mismos elementos que contiene. Así que lo que está haciendo con eficacia aquí es la creación de una nueva lista, la adición de los elementos a ella, y luego tirar de la lista de distancia.

Se había necesidad de hacer algo como:

List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);

Por otra parte, si usted está usando C # 3.0, basta con utilizar Concat, por ejemplo.

resultCollection.Concat(resultCollection2); // and optionally .ToList()

Otros consejos

Yo asumiría .ToList () es la creación de una nueva colección. Por lo tanto, los elementos se agregan a una nueva colección que se lanza de inmediato de distancia y el original permanece intacta.

resultCollection.ToList() devolverá una nueva lista.

Probar:

List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);

Trate

    IList newList = resultCollection.ToList () AddRange (resultCollection2).;

List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);

Puede utilizar cualquiera de los siguientes:

List<E> list = resultCollection as List<E>;
if (list == null)
    list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

O:

// Edit: this one could be done with LINQ, but there's no reason to limit
//       yourself to .NET 3.5 when this is just as short.
List<E> list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

O:

List<E> list = new List<E>(resultCollection.Concat(resultCollection2));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top