Answers:
您可以尝试以下方法:
List<Int32> copy = new List<Int32>(original);
或者,如果您在Linq中使用C#3和.NET 3.5,则可以执行以下操作:
List<Int32> copy = original.ToList();
MyClass
而不是类型Integer
,它是否还会复制项目,或只是引用它们?
lstStudentClass
是IEnumerable<StudentClass>
,它就适用于所有类型。如果您遇到其他情况,则需要提供更多信息。
要将一个列表的内容添加到已经存在的另一列表中,可以使用:
targetList.AddRange(sourceList);
如果您只想创建列表的新副本,请参阅Lasse的答案。
有关元素列表
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);
如果要复制前三个元素
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 );
}
这是另一种方法,但与其他方法相比却差一点。
List<int> i=original.Take(original.count).ToList();
ToList()
直接呢?