代码之家  ›  专栏  ›  技术社区  ›  anaximander

使用for循环填充列表

  •  -1
  • anaximander  · 技术社区  · 6 年前

    我有一个带有属性的数组,要使用 for loop

    for (int i = 0; i < data.cars.Count; i++)
    {
        var model = data.cars[i].model.ToString();
        cars = new List<Car>
        {
            new Car { Model = model }
        };
    }
    

    继续得到一个 System.ArgumentOutOfRangeException:Index was out of range Car 实例使用 for循环 .

    data.Count 是一个输入错误,在使用 data.cars.Count 数据.汽车.计数 是20个包含 model 财产。

    2 回复  |  直到 6 年前
        1
  •  5
  •   Steve    6 年前

    也许你可以删除这个循环并使用一个linq行

    var cars = data.cars.Select(x => new Car{ Model = x.model}).ToList();
    

    您的实际代码触发了上述异常,因为 它不等于 收藏。如果 数据.计数 数据车 然后发生异常。

    然而,代码中还有另一个逻辑错误,在每个循环中,代码都会创建一个包含单个Car元素的新列表。在每个循环中,代码都将此列表分配给外部变量 . 当然,当循环退出时,有外部变量。 汽车 分配给循环中只有最后一个元素的列表。

    List<Car> cars = new List<Car>();
    foreach (var car in data.cars)
    {
        cars.Add(new Car { Model = car.model });
    }
    
        2
  •  -1
  •   Mayank    6 年前

    您得到了这个异常,因为数据记录的数量可能高于每个数据中的汽车数量。例如,数据可以是10个项目的集合,但是每个数据记录中的cars集合只能包含一个或两个元素。因此,第一次、第二次和第三次迭代可能工作得很好,但之后会出现异常。

    尝试跟随

    foreach (var car in data.cars)
    {
        var model = car.model.ToString();
        cars = new List<Car>
        {
            new Car { Model = model }
        };
    }