Impossibile aggiungere una lista all'altra in C # ... cercando di utilizzare AddRange
-
19-09-2019 - |
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
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));