C# 如何截断列表?

C# 如何截断列表?,c#,C#,在System.Collections.Generic.List中删除第n个元素之后的每个元素并包括第n个元素的最简单方法是什么 如果可以使用RemoveRange方法,只需执行以下操作: list.RemoveRange(index, count); 其中索引是从何处开始,计数是删除多少。因此,要删除从某个索引到结尾的所有内容,代码如下: list.RemoveRange(index, list.Count - index); 相反,您可以使用: list.GetRange(index,

System.Collections.Generic.List
中删除第n个元素之后的每个元素并包括第n个元素的最简单方法是什么


如果可以使用
RemoveRange
方法,只需执行以下操作:

list.RemoveRange(index, count);
其中索引是从何处开始,计数是删除多少。因此,要删除从某个索引到结尾的所有内容,代码如下:

list.RemoveRange(index, list.Count - index);
相反,您可以使用:

list.GetRange(index, count);

但这将创建一个新列表,它可能不是您想要的。

如果LINQ不是一个选项,您可以向后循环列表:

for(int i = list.Count - 1; i >= index; i--)
{
    list.RemoveAt(i);
}

下面是一个示例应用程序

    static void Main(string[] args)
    {
        List<int> lint = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        Console.WriteLine("List Elements");
        lint.ForEach(delegate(int i) {  Console.WriteLine(i); });

        lint.RemoveRange(8, lint.Count - 8);

        Console.WriteLine("List Elements after removal");
        lint.ForEach(delegate(int i) { Console.WriteLine(i); });

        Console.Read();

    }
static void Main(字符串[]args)
{
List lint=new List(){1,2,3,4,5,6,7,8,9,10};
Console.WriteLine(“列表元素”);
lint.ForEach(委托(inti){Console.WriteLine(i);});
脱绒范围(8,皮棉计数-8);
Console.WriteLine(“删除后列出元素”);
lint.ForEach(委托(inti){Console.WriteLine(i);});
Console.Read();
}
无LINQ快速

    while (myList.Count>countIWant) 
       myList.RemoveAt(myList.Count-1);


你的意思是
list.RemoveRange(index,list.Count-index)
?嘿,我在看到你的评论之前编辑了我的答案,但是是的,你会这么做。
RemoveRange
不是LINQ方法,它是
list
的一个实例方法。在我看来,索引的长度更长<代码>列表.删除范围(len,list.Count-len);//保存列表中的第一个len elems@CoR-谢谢,你的评论可能救了我10分钟的命!此方法将创建一个新列表,而不是编辑现有列表,这可能是您想要的,也可能不是您想要的。@Daniet T,这不会创建新列表。它只允许您枚举一系列经过计算的原始列表。@Anthony Pegram:但如果OP需要一个
list
作为结果,他无论如何都会应用
ToList()
。@zerkms,如果ToList()是您答案的一部分,注释是正确的。但它不是。。。所以它不是。-1这个方法做什么?它是否返回一个新列表?它会修改列表吗?它的性能如何?还有别的办法吗?哪一个更快?+1表示简单的方法,虽然
RemoveRange
可能更有效。当有列表时,RemoveRange总是可用的,因为它与LINQ无关。啊,整洁。我以前没注意到。谢谢顺便说一句,这是@PandaWood:Yep的复制品。但现在太迟了:)还有两种不同的解决方案。问题标题不足以回答问题。在SQL中,Truncate表示全部删除。所以答案是
list.Clear():)@PawelCioch这不是SQL。这就是为什么你要读这个问题的主体。删去“缩短”。我不是以英语为母语的人,所以有些词只代表一种技术或一种意思。从未在字典中检查过Truncate,因此标头是SQL的触发器:)谢谢您指出它。RemoveRange可能更有效,也不太冗长。@ZarShardan它怎么会不那么冗长?您必须检查索引是否存在并计算计数。如果它允许在不引发异常的情况下给出一个不存在的索引和对实际存在的索引的计数,那么它会更容易,但事实上,它实际上更详细。@selalerer即使使用索引检查,它也只是稍微更详细,但更有效。此外,它更好地传达了意图,因此更易于阅读。if(idx0
时,它可以防止索引为
.Count-1
RemoveRange
出现问题(从而避免出现
.Count
值的情况)。
    while (myList.Count>countIWant) 
       myList.RemoveAt(myList.Count-1);