C#List RemoveAt(0)

Sky*_*sky -1 c# null loops list

我有一个列表,并希望顺利迭代它,同时删除一个接一个元素.我以为我可以这样做:

    List<Point> open = new List<Point>();
...            
while (!(open == null))
            {
                Point p = open.RemoveAt(0);
...
Run Code Online (Sandbox Code Playgroud)

但是,我不希望它如何工作,从"不能隐式地将类型'void'转换为'Point'开头".但是,在删除它/使其无效之前,RemoveAt的调用是否应该指向P?

Ser*_*kiy 5

List.RemoveAt不会返回您要删除的项目.null当您删除所有项目时,也不会出现列表.它将变为空,即Count等于0.我建议你用Queue<T>而不是List<T>.因此,您将能够移除拳头添加的项目并同时获取它:

Queue<Point> open = new Queue<Point>();

while(open.Count > 0)
{
    var point = open.Dequeue();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果要使用列表,并删除第一项,则应按索引检索项目,然后才从列表中删除它:

List<Point> open = new List<Point>();

while (open.Count > 0) // or open.Any()
{
    Point p = open[0];
    open.RemoveAt(0);
    // ...
}
Run Code Online (Sandbox Code Playgroud)