C# 清除所有数组列表数据

C# 清除所有数组列表数据,c#,C#,为什么下面的代码不清除所有数组列表数据 Console.WriteLine("Before cleaning:" + Convert.ToString(ID.Count)); //ID.Count = 20 for (int i = 0; i < ID.Count; i++) { ID.RemoveAt(i); } Console.WriteLine("After cle

为什么下面的代码不清除所有数组列表数据

        Console.WriteLine("Before cleaning:" + Convert.ToString(ID.Count));
        //ID.Count = 20
        for (int i = 0; i < ID.Count; i++)
        {
            ID.RemoveAt(i);
        }
        Console.WriteLine("After cleaning:" + Convert.ToString(ID.Count));
        //ID.Count = 10
Console.WriteLine(“清洗前:+Convert.ToString(ID.Count));
//ID.计数=20
对于(int i=0;i
为什么10会打印到屏幕上

也许还有另外一个特殊的功能,可以删除所有内容

ArrayList.Clear Method
Removes all elements from the ArrayList.
有关详细信息:

请使用clear()方法

更改
ID.RemoveAt(i)
ID.RemoveAt(0)


每当从集合中删除元素时,其索引也会更改。因此,当您说
ID.RemoveAt(0)时索引1处的元素现在将移动到索引0。因此,您必须再次删除相同的元素(如出列)。直到到达最后一个元素。但是,如果要一次删除所有元素,最好使用Clear()方法。

删除10项后,
ID.Count()==10
i==10
,因此循环停止


用于删除数组列表中的所有项。

您实际上只调用了
RemoveAt
10次。当
i
达到10时,
ID.Count
也将为10。您可以通过执行以下操作来解决此问题:

int count = ID.Count;
for (int i = 0; i < originalCount; i++)
{
    ID.RemoveAt(0);
}
但是使用
ID.Clear()
可能比所有这些更有效,即使它也是O(n)。

您的代码可以:

ID.RemoveAt(0);
...
ID.RemoveAt(9);
ID.RemoveAt(10); \\ at this point you have already removed 10 
                 \\ items so there is nothing left on 10- 19, but you are left with 
                 \\ the 'first' 10 elements
...
ID.RemoveAt(19);
一般来说,您的方法会从列表中删除第二个元素

正如其他人所提到的那样使用

`Array.Clear()` 
删除数组中的所有项

`Array.RemoveAt(i)` 

删除数组中第i个索引的元素。

第一次通过循环删除位置0处的项。列表中现在有19个项目,位置1处的项目现在移动到位置0,2->1,3->2等。第二次通过循环,您删除位置1处的项目(以前是项目2)。您已跳过位置0处的项目(以前是项目1)。这样,您就可以从列表中删除每一项。
`Array.RemoveAt(i)` 
`Array.RemoveAt(i)`