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


当前回答

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

targetList.AddRange(sourceList);

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

其他回答

很容易映射不同的列表集由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();
}

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

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

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

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

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

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

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

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