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

时间:2009-12-23 11:17:57

标签: c# oop list foreach copy

如何在不使用List的情况下将一个foreach中包含的项目转移到另一个{#1}}?

9 个答案:

答案 0 :(得分:510)

你可以试试这个:

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

或者如果你使用C#3和.NET 3.5,使用Linq,你可以这样做:

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

答案 1 :(得分:160)

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

targetList.AddRange(sourceList);

如果您只想创建列表的新副本,请参阅Lasse的回答。

答案 2 :(得分:31)

获取元素列表

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

答案 3 :(得分:5)

这是因为需要将单个属性复制到另一个列表:

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

答案 4 :(得分:4)

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

使用:

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

答案 5 :(得分:0)

好的,这个效果很好 根据上面的建议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 );
}

答案 6 :(得分:0)

易于通过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();

答案 7 :(得分:-1)

public static List<string> GetClone(this List<string> source)
{
    return source.Select(item => (string)item.Clone()).ToList();
}

答案 8 :(得分:-8)

这是另一种方法,但与其他方法比较差。

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