如何将项目从列表中复制到列表中?
如何将包含在一个List
的项目转移到另一个C#中,而不使用foreach
?
你可以试试这个:
List<Int32> copy = new List<Int32>(original);
或者如果你使用Linq的C#3和.NET 3.5,你可以这样做:
List<Int32> copy = original.ToList();
要将一个列表的内容添加到已存在的另一个列表中,可以使用:
targetList.AddRange(sourceList);
如果你只是想创build一个新的副本,请参阅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");
如果你想复制所有的元素
lstNew.AddRange(lstTest);
如果你想复制前4个元素
List<string> lstNew = lstTest.GetRange(0, 3);
这个方法将创build你的列表的副本,但是你的types应该是可序列化的。
使用:
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; }
这是如果需要将单个属性复制到另一个列表:
targetList.AddRange(sourceList.Select(i => i.NeededProperty));
确定这是行之有效的从上面的build议GetRange()不适用于列表作为参数…所以从上面的post增加了一点东西:(谢谢大家:)
/* 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();