我如何复制项目从列表到列表没有foreach?

如何在c#中不使用foreach将包含在List中的项转移到另一个List中?

512706 次浏览

你可以试试这个:

List<Int32> copy = new List<Int32>(original);

或者如果你使用c# 3和。net 3.5,使用Linq,你可以这样做:

List<Int32> copy = original.ToList();

我看到这个答案仍然得到了点赞。好吧,这里有一个秘密给你:上面的答案仍然使用foreach。请不要再投票了。

要将一个列表的内容添加到已经存在的另一个列表,您可以使用:

targetList.AddRange(sourceList);

如果您只是想创建一个列表的新副本,请参阅顶部的答案。

这里有另一种方法,但它比其他方法差一点。

List<int> i=original.Take(original.count).ToList();

用于元素列表

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;
}

这是如果需要将一个属性复制到另一个列表:

targetList.AddRange(sourceList.Select(i => i.NeededProperty));

好的,这工作得很好 根据上面的建议,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 );
}

很容易映射不同的列表集由linq没有for循环

var List1= new List<Entities1>();


var List2= new List<Entities2>();


var List2 = List1.Select(p => new Entities2
{
EntityCode = p.EntityCode,
EntityId = p.EntityId,
EntityName = p.EntityName
}).ToList();
public static List<string> GetClone(this List<string> source)
{
return source.Select(item => (string)item.Clone()).ToList();
}

添加到顶部的答案,如果你想要“列表中的对象”的副本,那么你可以使用Select并创建副本。(当其他答案构成“列表的副本”时,这个答案构成“副本的列表”)。

假设你的项目有一个Copy方法:

List<MyObject> newList = oldList.Select(item => item.Copy()).ToList();

或者你可以用构造函数从之前的对象中创建一个新对象:

List<MyObject> newList = oldList.Select(item => new MyObject(item)).ToList();

Select的结果是一个IEnumerable<MyObject>,例如,如果你的目标是添加到一个现有的列表中,你也可以传递给AddRange