c# - recorrer - ¿Cómo copio elementos de una lista a otra sin foreach?
llenar lista c# (7)
¿Cómo transfiero los elementos contenidos en una List
a otra en C # sin usar foreach
?
Aquí hay otro método pero es un poco peor comparado con otro.
List<int> i=original.Take(original.count).ToList();
Este método creará una copia de su lista, pero su tipo debe ser serializable.
Utilizar:
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
Método:
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, esto está funcionando bien. De las sugerencias anteriores, GetRange () no funciona para mí con una lista como argumento ... así que estoy mejorando un poco las publicaciones anteriores: (gracias a todos :)
/* 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 );
}
Para agregar el contenido de una lista a otra lista que ya existe, puede usar:
targetList.AddRange(sourceList);
Si solo desea crear una nueva copia de la lista, vea la respuesta de Lasse.
Para una lista de elementos.
List<string> lstTest = new List<string>();
lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");
Si quieres copiar todos los elementos.
List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
Si quieres copiar los 3 primeros elementos.
List<string> lstNew = lstTest.GetRange(0, 3);
Podrías probar esto:
List<Int32> copy = new List<Int32>(original);
o si está utilizando C # 3 y .NET 3.5, con Linq, puede hacer esto:
List<Int32> copy = original.ToList();
Y esto es si se necesita copiar una sola propiedad a otra lista:
targetList.AddRange(sourceList.Select(i => i.NeededProperty));