Kann nicht Anfügen einer Liste in eine andere in C # ... versuchen AddRange zu verwenden
-
19-09-2019 - |
Frage
Hallo Ich versuche, 1 Liste in einer anderen anzuhängen. Ich habe es getan mit AddRange()
vor, aber es scheint nicht hier arbeiten zu werden ... Hier ist der Code:
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);
Ich habe das Debuggen die Ergebnisse zu überprüfen, hier ist, was ich habe: resultCollection
eine Zählung von 4 resultCollection2
hat eine Anzahl von 6, und nach dem Angebot Hinzufügen resultCollection
hat immer noch nur eine Anzahl von 4, wenn es eine Zählung haben sollte von 10.
Kann jemand sehen, was ich falsch mache? Jede Hilfe ist willkommen.
Danke,
Matt
Lösung
Wenn Sie anrufen ToList()
Sie nicht die Sammlung in einem List<T>
wickeln sind Sie ein neues List<T>
mit den gleichen Posten in ihm zu schaffen. Also, was Sie effektiv hier tun, ist eine neue Liste erstellen, das Hinzufügen der Elemente, und dann wirft die Liste entfernt.
Sie müssen so etwas wie zu tun:
List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);
Alternativ, wenn Sie mit C # 3.0, einfach Concat
verwenden, z.
resultCollection.Concat(resultCollection2); // and optionally .ToList()
Andere Tipps
Ich würde davon ausgehen .ToList () ist eine neue Kollektion zu schaffen. Deshalb ist ihre Elemente zu einer neuen Kollektion werden hinzugefügt, die sofort weggeworfen wird und die ursprünglichen bleibt unberührt.
resultCollection.ToList()
wird eine neue Liste zurück.
Versuchen Sie:
List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);
Versuchen
IList newList = resultCollection.ToList () AddRange (resultCollection2.);
List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);
Sie können eine der folgenden Aktionen verwenden:
List<E> list = resultCollection as List<E>;
if (list == null)
list = new List<E>(resultCollection);
list.AddRange(resultCollection2);
Oder:
// 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);
Oder:
List<E> list = new List<E>(resultCollection.Concat(resultCollection2));