使用for循环填充列表

时间:2018-08-12 20:01:01

标签: c# for-loop

我有一个数组,具有要使用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 loop实例中插入每个模型名称。

编辑: data.Count是一个错字,使用data.cars.Count时会抛出相同的异常。需要说明的是,data.cars.Count的长度是20个对象,其中包含model属性。

2 个答案:

答案 0 :(得分:5)

可能您可以删除此循环并使用一条linq行

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

您的实际代码会触发上述异常,因为无论 data.Count 是多少,它都不等于 cars 集合中的元素数量。如果 data.Count 大于 data.cars 集合中的元素数量,则会发生异常。

但是,如果代码中存在另一个逻辑错误,则在每个循环中,代码都会创建一个包含单个Car元素的新List。在每个循环中,您的代码将此列表分配给外部变量 cars 。当然,当循环退出时,您会将外部变量 cars 分配给仅包含循环中最后一个元素的列表。

如果您喜欢标准循环方法,则可以编写

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

答案 1 :(得分:-1)

您将收到该异常,因为数据记录的数量可能会高于每个数据中的汽车数量。例如,数据可能是10个项目的集合,但每个数据记录中的汽车集合只能包含一个或两个元素。因此,第一次,第二次和第三次迭代可能效果很好,但是之后您将得到一个例外。

尝试关注

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