Wie übertrage ich die Elemente einer List
auf eine andere in C #, ohne foreach
zu verwenden?
Sie könnten dies versuchen:
List<Int32> copy = new List<Int32>(original);
oder wenn Sie C # 3 und .NET 3.5 mit Linq verwenden, können Sie Folgendes tun:
List<Int32> copy = original.ToList();
Um den Inhalt einer Liste zu einer anderen Liste hinzuzufügen, die bereits vorhanden ist, können Sie Folgendes verwenden:
targetList.AddRange(sourceList);
Wenn Sie nur eine neue Kopie der Liste erstellen möchten, lesen Sie die Antwort von Lasse.
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);
Dies ist der Fall, wenn das Kopieren einer einzelnen Eigenschaft in eine andere Liste erforderlich ist:
targetList.AddRange(sourceList.Select(i => i.NeededProperty));
Diese Methode erstellt eine Kopie Ihrer Liste, Ihr Typ sollte jedoch serialisierbar sein.
Benutzen:
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;
}
OK, das funktioniert gut Von den obigen Vorschlägen funktioniert GetRange () für mich nicht mit einer Liste als Argument ... also versüßt die Dinge etwas von den obigen Posts:
/* Where __strBuf is a string list used as a dumping ground for data */
public List < string > pullStrLst( )
{
List < string > lst;
lst = __strBuf.GetRange( 0, __strBuf.Count );
__strBuf.Clear( );
return( lst );
}