3

我有List<Item> OldItems = new List<Item>并且我想将前 10 项OldItems移到NewItems其中List<Item> NewItems= new List<Item>

有没有类似的东西?

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

5 回答 5

12

试试这个:

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

备用:

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

Takex将从您的列表中获取第一个项目看这里。Skip 将跳过x列表中的元素,请看这里如果您将使用列表引用,则 RemoveRange 是一个替代选项。

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

于 2013-09-09T09:57:04.330 回答
3

你可以这样做:

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

(这不使用Linq)

于 2013-09-09T09:59:31.333 回答
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
于 2013-09-09T10:03:40.850 回答
1

您可以使用

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

要实现这一点。

于 2013-09-09T10:00:58.147 回答
-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);
于 2013-09-09T10:33:25.090 回答