HOWTO · Csharp
So fügen Sie eine Liste zu einer anderen Liste in C# hinzu
Erfahren Sie, wie Sie in C# eine Liste zu einer anderen Liste hinzufügen
Auf dieser Seite
Um die Elemente einer C# List<T> an eine andere anzuhängen, rufen Sie AddRange für die Liste auf, die sie aufnehmen soll. Der generische Sammlungstyp ist List<T>, wobei T den Elementtyp darstellt. Die Quellelemente werden in ihrer ursprünglichen Reihenfolge nach den vorhandenen Elementen des Ziels hinzugefügt. AddRange ändert das Ziel; es fügt die Quellliste nicht als verschachteltes Element hinzu. Verwenden Sie diese Methode, wenn beide Sammlungen kompatible Elementtypen enthalten. Eine List<T> speichert Elemente eines Typs, wählen Sie daher ein passendes Ziel und eine passende Quelle.
So fügen Sie eine Liste zu einer anderen Liste in C# hinzu
List<T> ist eine Sammlung mit veränderbarer Größe, deren Elemente denselben Typ T haben. In diesem Beispiel enthalten beide Listen Ganzzahlen. Der Namespace System.Collections.Generic stellt List<T> bereit, schließen Sie ihn also ein, falls Ihr Projekt diesen Namespace nicht bereits importiert. Das Programm hängt die zweite Liste an die erste an und gibt dann die resultierende Zielliste aus:
Die generische Typnotation ist List<T>; ersetzen Sie T durch den Elementtyp, den jedes Element gemeinsam hat, zum Beispiel int.
Führen Sie dieses vollständige Beispiel aus:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> firstList = new List<int> { 1, 2, 3 };
List<int> secondList = new List<int> { 4, 5, 6 };
firstList.AddRange(secondList);
Console.WriteLine(string.Join(", ", firstList));
}
}
1, 2, 3, 4, 5, 6
Der Aufruf hängt die Werte aus secondList nach den Werten an, die bereits in firstList vorhanden sind; das Ziel bleibt eine flache List<int>. Beide Listen müssen kompatible Elementtypen haben. Zum Beispiel kann eine List<int> durch diesen Aufruf keine Zeichenketten aus einer List<string> aufnehmen. Konvertieren oder ordnen Sie die Elemente zuerst zu, falls das Ziel einen anderen Typ benötigt.
Eine Liste mit List.AddRange anhängen
AddRange ist eine Instanzmethode von List<T>. Rufen Sie sie für das Ziel auf und übergeben Sie eine Sammlung, die Elemente desselben T liefert. Ihr Parameter ist IEnumerable<T>, die Quelle kann also ein Array oder eine andere kompatible Sequenz sein; sie muss keine andere List<T> sein. Zum Beispiel hängt firstList.AddRange(secondList) die Quellsequenz an das Ende von firstList an.
Die Methode durchläuft die Quelle und hängt ihre Elemente in der Reihenfolge der Sequenz an. Nach dem Aufruf enthält firstList ihre ursprünglichen Werte, gefolgt von den Werten aus secondList, während secondList ihre eigenen Elemente behält. Dieser Unterschied ist wichtig, wenn späterer Code die Quellsammlung noch benötigt. Wenn Sie auch das Ziel erhalten müssen, rufen Sie AddRange wie im nächsten Abschnitt gezeigt für eine separate Liste auf.
Die ursprünglichen Listen unverändert lassen
Um zwei Eingaben zu kombinieren, ohne eine von beiden zu ändern, erstellen Sie ein neues Ziel aus der ersten Liste und hängen Sie die zweite Liste daran an: List<int> combined = new List<int>(firstList); gefolgt von combined.AddRange(secondList);. Der Konstruktor kopiert die Elemente der ersten Eingabe in eine neue Liste, und die Methode ändert nur dieses neue Ziel. Verwenden Sie combined für die verbundene Sequenz; die ursprünglichen Listen bleiben in ihrem vorherigen Zustand verfügbar.
Dies ist eine flache Kopie. Sie kopiert die Listenstruktur und die Elementverweise, nicht die Objekte, auf die die Elemente verweisen. Bei Werttypen wie int werden die Werte in die neue Liste kopiert. Bei Verweistypen zeigen die neue Liste und die ursprüngliche Liste weiterhin auf dieselben Objekte. Wenn diese Objekte veränderbar sind und einen unabhängigen Zustand benötigen, erstellen Sie auch Kopien der Objekte.
Listen mit benutzerdefinierten Objekten hinzufügen
AddRange funktioniert auch mit benutzerdefinierten Klassen, wenn die Quellelemente im Ziel gespeichert werden können. Wenn zum Beispiel people und peopleToAdd beide List<Person> sind, platziert der Aufruf people.AddRange(peopleToAdd) jede Person nach den vorhandenen Einträgen. Sie können dann people durchlaufen und eine Eigenschaft wie person.Name lesen, um sie anzuzeigen oder zu verarbeiten.
Die Methode hängt Verweise auf die vorhandenen Person-Instanzen an; sie klont die Objekte nicht. Das Ändern einer veränderbaren Person über eine der beiden Listen ist über die andere Liste sichtbar, weil beide Listen auf dieselbe Instanz verweisen. Derselbe Ansatz gilt für andere benutzerdefinierte Typen, zum Beispiel Produkte oder Benutzerdatensätze, vorausgesetzt, ihre Elementtypen sind mit dem T des Ziels kompatibel.