Come trasferisco gli elementi contenuti l'uno List
nell'altro in C # senza usare foreach
?
Come trasferisco gli elementi contenuti l'uno List
nell'altro in C # senza usare foreach
?
Risposte:
Puoi provare questo:
List<Int32> copy = new List<Int32>(original);
o se stai usando C # 3 e .NET 3.5, con Linq, puoi farlo:
List<Int32> copy = original.ToList();
MyClass
invece di Integer
, li copia anche o li fa semplicemente riferimento?
lstStudentClass
sia un IEnumerable<StudentClass>
, funzionerà. In caso contrario, è necessario fornire ulteriori informazioni.
Per aggiungere il contenuto di un elenco a un altro elenco già esistente, è possibile utilizzare:
targetList.AddRange(sourceList);
Se vuoi solo creare una nuova copia dell'elenco, vedi la risposta di Lasse.
Per un elenco di elementi
List<string> lstTest = new List<string>();
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<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
Se vuoi copiare i primi 3 elementi
List<string> lstNew = lstTest.GetRange(0, 3);
Questo metodo creerà una copia del tuo elenco ma il tuo tipo dovrebbe essere serializzabile.
Uso:
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
Metodo:
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, questo funziona bene Dai suggerimenti sopra GetRange () non funziona per me con un elenco come argomento ... quindi addolcisci un po 'le cose dai post sopra: (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 rispetto ad altri.
List<int> i=original.Take(original.count).ToList();
ToList()
direttamente?