将前10个列表项移动到另一个项列表

时间:2013-09-09 09:55:30

标签: c# linq

我有List<Item> OldItems = new List<Item>我希望将OldItems的前10项移至NewItems List<Item> NewItems= new List<Item>

有类似的东西吗?

NewItems.AddRange(OldItems.<First10Items>);
OldItems.Delete(<First10Items>);

5 个答案:

答案 0 :(得分:10)

试试这个:

NewItems.AddRange(OldItems.Take(10));
OldItems = OldItems.Skip(10).ToList();

替代:

NewItems.AddRange(OldItems.Take(10));
OldItems.RemoveRange(0,10);

将从列表look here中获取x个第一项。 跳过将跳过列表look here中的x元素。如果您使用列表reference,则RemoveRange是另一种选择。

正如Matthew所说,第二个选项不会创建新列表并在原地删除,所以它是首选。

答案 1 :(得分:3)

你可以这样做:

var NewItems = OldItems.GetRange(0, 10);
OldItems.RemoveRange(0, 10);

(这不使用Linq)

答案 2 :(得分:2)

试试这个

List<Item> oldItems = new List<Item>();
List<Item> newItems = new List<Item>();
newItems.AddRange(oldItems.Take(10));//add first 10 items to new list
oldItems.RemoveRange(0, 10);//remove first 10 items from old list

答案 3 :(得分:1)

您可以使用

GetRange(int index, int count); RemoveRange(int index, int count);

实现这一点。

答案 4 :(得分:-2)

List<string> checkForNull = new List<string>();
        List<string> newList = new List<string>();
        for (int i = 0; i < 10; i++)
        {
            checkForNull.Add(Convert.ToString(i));
        }
        for (int i = 10; i < 20; i++)
        {
            newList.Add(Convert.ToString(i));
        }
        checkForNull.AddRange(newList.Take(5));
        newList.RemoveRange(0, 5);