361 Stimmen

Wie kopiere ich Elemente von Liste zu Liste ohne foreach?

Wie übertrage ich die in einem Artikel enthaltenen List zu einem anderen in C# ohne Verwendung von foreach ?

627voto

Lasse V. Karlsen Punkte 364542

Sie könnten dies versuchen:

List<Int32> copy = new List<Int32>(original);

oder wenn Sie C# 3 und .NET 3.5 verwenden, mit Linq, können Sie dies tun:

List<Int32> copy = original.ToList();

Wie ich sehe, wird diese Antwort immer noch hochgestuft. Nun, hier ist ein Geheimnis für dich: die obige Antwort verwendet immer noch ein foreach . Bitte bewerten Sie dies nicht weiter hoch.

193voto

Jon Skeet Punkte 1325502

Um den Inhalt einer Liste zu einer anderen, bereits existierenden Liste hinzuzufügen, können Sie verwenden:

targetList.AddRange(sourceList);

Wenn Sie nur eine neue Kopie der Liste erstellen wollen, lesen Sie die oberste Antwort.

41voto

Paras Punkte 2937

Für eine Liste von Elementen

List<string> lstTest = new List<string>();

lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");

Wenn Sie alle Elemente kopieren möchten

List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);

Wenn Sie die ersten 3 Elemente kopieren möchten

List<string> lstNew = lstTest.GetRange(0, 3);

6voto

usefulBee Punkte 8632

Und zwar dann, wenn das Kopieren einer einzelnen Eigenschaft in eine andere Liste erforderlich ist:

targetList.AddRange(sourceList.Select(i => i.NeededProperty));

4voto

garish Punkte 557

Mit dieser Methode wird eine Kopie Ihrer Liste erstellt, aber Ihr Typ sollte serialisierbar sein.

Verwendung:

List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList(); 

Methode:

public static List<T> CopyList<T>(this List<T> lst)
    {
        List<T> lstCopy = new List<T>();
        foreach (var item in lst)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, item);
                stream.Position = 0;
                lstCopy.Add((T)formatter.Deserialize(stream));
            }
        }
        return lstCopy;
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X