Відповіді:
Ви можете спробувати це:
List<Int32> copy = new List<Int32>(original);
або якщо ви використовуєте C # 3 та .NET 3.5, за допомогою Linq ви можете це зробити:
List<Int32> copy = original.ToList();
MyClass
замість них є типовими Integer
, чи копіює вони їх, чи просто посилається на них?
lstStudentClass
він є IEnumerable<StudentClass>
, він буде працювати. Якщо у вас виникне інше, вам потрібно надати більше інформації.
Щоб додати вміст одного списку до іншого, який вже існує, ви можете використовувати:
targetList.AddRange(sourceList);
Якщо ви просто хочете створити нову копію списку, дивіться відповідь Лассе.
Для переліку елементів
List<string> lstTest = new List<string>();
lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");
Якщо ви хочете скопіювати всі елементи
List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
Якщо ви хочете скопіювати перші 3 елементи
List<string> lstNew = lstTest.GetRange(0, 3);
Цей метод створить копію вашого списку, але ваш тип має бути серійним.
Використання:
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
Спосіб:
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;
}
Гаразд, це працює добре. З пропозицій, наведених вище, GetRange () не працює для мене зі списком як аргумент ... тож підсолодивши речі трохи вище від публікацій: (дякую всім :)
/* 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 );
}