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


当前回答

好的,这工作得很好 根据上面的建议,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 );
}

其他回答

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

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

你可以试试这个:

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

或者如果你使用c# 3和。net 3.5,使用Linq,你可以这样做:

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

我看到这个答案仍然得到了点赞。好吧,这里有一个秘密给你:上面的答案仍然是使用一个foreach。请不要再投票了。

用于元素列表

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

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

这里有另一种方法,但它比其他方法差一点。

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