Come posso copiare elementi da un elenco all’altro senza foreach?

Come posso trasferire gli articoli contenuti in un List in un altro in C # senza utilizzare foreach ?

Potresti provare questo:

 List copy = new List(original); 

oppure se stai usando C # 3 e .NET 3.5, con Linq, puoi farlo:

 List copy = original.ToList(); 

Per aggiungere il contenuto di una lista a un’altra lista già esistente, puoi usare:

 targetList.AddRange(sourceList); 

Se vuoi solo creare una nuova copia della lista, vedi la risposta di Lasse.

Per un elenco di elementi

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

Se vuoi copiare tutti gli elementi

 List lstNew = new List(); lstNew.AddRange(lstTest); 

Se vuoi copiare i primi 3 elementi

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

Questo metodo creerà una copia del tuo elenco ma il tuo tipo dovrebbe essere serializzabile.

Uso:

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

Metodo:

 public static List CopyList(this List lst) { List lstCopy = new List(); 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; } 

E questo è necessario se si copia una singola proprietà in un’altra lista:

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

OK questo funziona bene Dai suggerimenti sopra riportati GetRange () non funziona per me con una lista come argomento … quindi addolcendo un po ‘le cose dai post precedenti: (grazie a tutti 🙂

 /* 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 ); } 

Ecco un altro metodo, ma è un po ‘peggio confrontare con gli altri.

 List i=original.Take(original.count).ToList();