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
(静态)复制数据。