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

C# 将前10个列表项移动到另一个列表项,c#,linq,C#,Linq,我有List OldItems=new List,我想将OldItems的前10项移动到NewItems,即List NewItems=new List 有类似的东西吗 NewItems.AddRange(OldItems.<First10Items>); OldItems.Delete(<First10Items>); NewItems.AddRange(OldItems.); Delete(); 试试这个: NewItems.AddRange(OldItems.Ta

我有
List OldItems=new List
,我想将
OldItems
的前10项移动到
NewItems
,即
List NewItems=new List

有类似的东西吗

NewItems.AddRange(OldItems.<First10Items>);
OldItems.Delete(<First10Items>);
NewItems.AddRange(OldItems.);
Delete();
试试这个:

NewItems.AddRange(OldItems.Take(10));
OldItems = OldItems.Skip(10).ToList();
备选方案:

NewItems.AddRange(OldItems.Take(10));
OldItems.RemoveRange(0,10);
Take将从列表中选取
x
第一项。 Skip将跳过列表中的
x
元素。如果要使用列表,RemoveRange是一个可选选项

正如Matthew所说,第二个选项不会创建新列表并在适当的位置执行删除操作,因此它更可取。

您可以:

var NewItems = OldItems.GetRange(0, 10);
OldItems.RemoveRange(0, 10);
(这不使用Linq)

您可以使用

GetRange(int index, int count); RemoveRange(int index, int count);
要实现此功能,请尝试此功能

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
List oldItems=new List();
List newItems=新列表();
newItems.AddRange(oldItems.Take(10))//将前10项添加到新列表中
旧项目。删除范围(0,10)//从旧列表中删除前10项
列表checkForNull=新列表();
List newList=新列表();
对于(int i=0;i<10;i++)
{
checkForNull.Add(Convert.ToString(i));
}
对于(int i=10;i<20;i++)
{
newList.Add(Convert.ToString(i));
}
checkForNull.AddRange(newList.Take(5));
newList.RemoveRange(0,5);

无法编译。OldItems是一个列表,因此无法将Skip()的结果分配给它。哎呀,修复了它。我还没看过定义。谢谢。您还需要一个
OldItems.RemoveRange(0,10)
我想这里的问题可能是您没有从
OldItems
中删除任何项目-相反,您创建了一个新列表,其中删除了项目并将
OldItems
分配给新列表。我认为OP可能希望就地移除(尽管他没有明确要求)。但是,如果其他任何东西也通过不同的引用引用了OldItems,它仍然会看到旧的未修改列表。@MatthewWatson说得好,谢谢。我用
RemoveRange
制作了第二个代码片段,它将解决这个问题。我不想粗鲁,或者其他什么,但是有
linq
标记,所以更喜欢linq答案:)@wudzik这会是个问题,你不觉得吗?你是对的,但今天是星期一,对吗?:)谢谢你的参考。
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);