Domanda

Ciao Sto cercando di aggiungere 1 lista all'altra. L'ho fatto usando AddRange() prima, ma non sembra di lavorare qui ... Ecco il codice:

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);

Ho fatto il debug per verificare i risultati, ecco cosa ho ricevuto: resultCollection ha un conteggio di 4 resultCollection2 ha un conteggio di 6, e dopo l'aggiunta della gamma, resultCollection ancora ha solo un conteggio di 4, quando si dovrebbe avere un conteggio di 10.

Chiunque può vedere quello che sto facendo di sbagliato? Ogni aiuto è apprezzato.

Grazie,
Matt

È stato utile?

Soluzione

Quando si chiama ToList() non si sta avvolgendo la raccolta in un List<T> si sta creando un nuovo List<T> con gli stessi articoli in esso. Allora, cosa stai facendo qui in modo efficace è la creazione di un nuovo elenco, aggiungendo gli elementi ad esso, e poi buttare via l'elenco.

Avresti bisogno di fare qualcosa di simile:

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

In alternativa, se si sta utilizzando C # 3.0, è sufficiente utilizzare Concat, per es.

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

Altri suggerimenti

Vorrei assumere ToList () è la creazione di una nuova collezione. Pertanto i tuoi articoli vengono aggiunti ad una nuova collezione che è immediatamente gettato via e l'originale rimane intatta.

resultCollection.ToList() restituirà una nuova lista.

Prova:

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

Prova

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

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

È possibile utilizzare uno dei seguenti modi:

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top