C# 如何在没有foreach的情况下将项目从一个列表复制到另一个列表?

C# 如何在没有foreach的情况下将项目从一个列表复制到另一个列表?,c#,oop,list,foreach,copy,C#,Oop,List,Foreach,Copy,如何在不使用foreach的情况下,将一个列表中包含的项目转移到C#中的另一个列表中?您可以尝试以下方法: List<Int32> copy = new List<Int32>(original); List<string> lstNew = lstTest.GetRange(0, 3); 列表副本=新列表(原件); 或者,如果您使用C#3和.NET 3.5,使用Linq,您可以执行以下操作: List<Int32> copy = origi

如何在不使用
foreach
的情况下,将一个
列表中包含的项目转移到C#中的另一个
列表中?

您可以尝试以下方法:

List<Int32> copy = new List<Int32>(original);
List<string> lstNew = lstTest.GetRange(0, 3);
列表副本=新列表(原件);
或者,如果您使用C#3和.NET 3.5,使用Linq,您可以执行以下操作:

List<Int32> copy = original.ToList();
List<string> lstNew = lstTest.GetRange(0, 3);
List copy=original.ToList();

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

targetList.AddRange(sourceList);
List<string> lstNew = lstTest.GetRange(0, 3);

如果您只是想创建列表的新副本,请参见Lasse的答案。

这里是另一种方法,但与其他方法相比,它稍微差一点

List<int> i=original.Take(original.count).ToList();
List<string> lstNew = lstTest.GetRange(0, 3);
List 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 = lstTest.GetRange(0, 3);
List lstest=新列表();
lstest.添加(“test1”);
lstest.添加(“test2”);
lstest.添加(“test3”);
lstest.添加(“test4”);
lstest.添加(“test5”);
lstest.添加(“test6”);
如果要复制所有元素

List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);
List<string> lstNew = lstTest.GetRange(0, 3);
List lstNew=newlist();
lstNew.AddRange(lstest);
如果要复制前3个元素

List<string> lstNew = lstTest.GetRange(0, 3);
List lstNew=lstest.GetRange(0,3);

此方法将创建列表的副本,但您的类型应可序列化

List<string> lstNew = lstTest.GetRange(0, 3);
使用:

List<string> lstNew = lstTest.GetRange(0, 3);
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList(); 
listlstudent=db.Students.Where(s=>s.DOB
方法:

List<string> lstNew = lstTest.GetRange(0, 3);
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;
    }
公共静态列表copyrist(此列表lst)
{
List lstCopy=新列表();
foreach(lst中的var项目)
{
使用(MemoryStream stream=new MemoryStream())
{
BinaryFormatter formatter=新的BinaryFormatter();
序列化(流、项);
流位置=0;
添加((T)格式化程序.反序列化(流));
}
}
返回副本;
}

如果需要将单个属性复制到另一个列表,则需要执行以下操作:

List<string> lstNew = lstTest.GetRange(0, 3);
targetList.AddRange(sourceList.Select(i => i.NeededProperty));
好的,这个很好用 从上面的建议来看,GetRange()不适合我将列表作为一个参数……因此,从上面的帖子中,可以让事情变得更甜蜜一些:(谢谢大家:)

List<string> lstNew = lstTest.GetRange(0, 3);
/*其中u strBuf是用作数据转储场的字符串列表*/
公共列表pullStrLst()
{
列表lst;
lst=uuu strBuf.GetRange(0,uu strBuf.Count);
__strBuf.Clear();
返回(lst);
}

通过linq无需for循环即可轻松映射不同的列表集

List<string> lstNew = lstTest.GetRange(0, 3);
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();
var List1=新列表();
var List2=新列表();
var List2=List1.Select(p=>newentities2
{
EntityCode=p.EntityCode,
EntityId=p.EntityId,
EntityName=p.EntityName
}).ToList();
公共静态列表GetClone(此列表源)
{
返回source.Select(item=>(string)item.Clone()).ToList();
}

如果你需要原始列表的深层克隆,你可以在这个相关问题中找到答案:@mrmillsy:他们做的事情不同。我的回答集中在“我已经有了一个清单,我想把东西复制到清单上”上。无论如何,我的问题可能更适合一个新问题。感谢您的回复。如果您想完全替换现有列表的内容,请先调用targetList.Clear()。这是正确的答案,因为复制意味着添加,而不是替换。OP要求复制项目而不是整个集合。你为什么要这样做?为什么不直接
ToList()
呢?如果项目的类型是
MyClass
而不是
Integer
,它是也复制项目,还是只是引用项目?不使用非基本类型。列表副本=新列表(lstStudentClass);它适用于所有类型,只要
lstStudentClass
IEnumerable
,它就可以工作。如果您遇到其他情况,您需要提供更多信息。原文的含义是什么;在末尾,将集合传递给列表的构造函数,然后构造函数会将该集合的所有元素复制到新创建的列表中。序列化是否会造成显著的性能损失?这甚至不是一个答案。嗯…好吧,上面的一些建议在Vis 17中根本不起作用。我已经清理了提供的最佳答案…嘿,presto…它有效:)仅代码答案往往被认为是低质量的。你能解释一下你的答案是如何解决这个问题的,以及这与现有答案有什么不同。这是正确的答案
AddRange
没有在文档中指定它,它通过引用复制或只是添加对象,但是如果搜索实现,它将使用
Array.Copy
(静态)复制数据。