List
的情况下将一个foreach
中包含的项目转移到C#中的另一个项目中?#1 楼
您可以尝试以下方法:List<Int32> copy = new List<Int32>(original);
,或者如果您使用的是C#3和.NET 3.5,则可以使用Linq来执行此操作:
List<Int32> copy = original.ToList();
评论
如果项目的类型为MyClass而不是Integer,它是否还会复制这些项目,或者只是引用它们?
–佩德罗·莫雷拉(Pedro Moreira)
2014年6月6日14:14
不适用于非基本类型。 List
–花哨
2015年4月3日在10:59
只要lstStudentClass是IEnumerable
–拉瑟·V·卡尔森(Lasse V. Karlsen)
2015年4月3日,11:05
(原始的)是什么意思;在最后
–拉胡尔(Rahul Chaudhari)
2015年9月13日14:40在
您将一个集合传递给列表的构造函数,然后构造函数将将该集合的所有元素复制到新创建的列表中。
–拉瑟·V·卡尔森(Lasse V. Karlsen)
15年9月13日在15:14
#2 楼
要将一个列表的内容添加到已经存在的另一列表中,可以使用:targetList.AddRange(sourceList);
如果您只想创建列表的新副本,请参阅Lasse的答案。
评论
@mrmillsy:好吧,他们做了不同的事情。我的回答集中在“我已经有一个列表,并且我想将其复制到该列表”上
–乔恩·斯基特(Jon Skeet)
13年1月1日在12:44
真正。无论如何,我的问题可能更适合于新问题。感谢您的回复。
–mrmillsy
13年1月1日在12:47
如果要完全替换现有列表的内容,则应首先调用targetList.Clear()。
–易卜拉欣
13年7月20日在15:16
#3 楼
有关元素的列表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);
#4 楼
这是如果需要将单个属性复制到另一个列表:targetList.AddRange(sourceList.Select(i => i.NeededProperty));
#5 楼
此方法将创建列表的副本,但您的类型应可序列化。使用:
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;
}
评论
序列化是否会严重影响性能?
–丹·德夫
16年11月2日在13:43
#6 楼
好的,这很好用。从上面的建议中可以看出,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 );
}
评论
这甚至不是答案。
– Maciej Jureczko
17年8月30日在14:20
嗯...好吧,上面的一些建议在Vis 17中根本不起作用,我已经清理了提供的最佳答案...并且嘿,很早...它起作用了:)
–吉姆·史蒂文斯(Jim Stevens)
17年8月30日在14:31
#7 楼
易于通过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();
#8 楼
这是另一种方法,但与其他方法相比却差一点。List<int> i=original.Take(original.count).ToList();
评论
为什么要这么做?为什么不直接使用ToList()?
– nawfal
2013年9月23日19:10在
评论
如果您需要原始列表的深层克隆,可以在以下相关问题中找到答案:stackoverflow.com/questions/222598/…