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

War es hilfreich?

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));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top