Jak przenieść elementy zawarte w jednym List
w drugim w C # bez użycia foreach
?
Jak przenieść elementy zawarte w jednym List
w drugim w C # bez użycia foreach
?
Odpowiedzi:
Możesz spróbować:
List<Int32> copy = new List<Int32>(original);
lub jeśli używasz C # 3 i .NET 3.5, z Linq, możesz to zrobić:
List<Int32> copy = original.ToList();
MyClass
zamiast Integer
, to czy kopiuje je również, czy tylko je odwołuje?
lstStudentClass
jest IEnumerable<StudentClass>
, będzie działać. W przeciwnym razie musisz podać więcej informacji.
Aby dodać zawartość jednej listy do innej, która już istnieje, możesz użyć:
targetList.AddRange(sourceList);
Jeśli chcesz tylko utworzyć nową kopię listy, zobacz odpowiedź Lasse.
Aby uzyskać listę elementów
List<string> lstTest = new List<string>();
lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");
Jeśli chcesz skopiować wszystkie elementy
List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
Jeśli chcesz skopiować pierwsze 3 elementy
List<string> lstNew = lstTest.GetRange(0, 3);
Ta metoda utworzy kopię listy, ale typ powinien być możliwy do serializacji.
Posługiwać się:
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
Metoda:
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, to działa dobrze Z powyższych sugestii GetRange () nie działa dla mnie z listą jako argumentem ... więc trochę osłabiając nieco z postów powyżej: (dziękuję wszystkim :)
/* 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 );
}
Tutaj inna metoda, ale jest niewiele gorsza w porównaniu do innych.
List<int> i=original.Take(original.count).ToList();
ToList()
bezpośrednio?