我有一个数组,具有要使用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
属性。
答案 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 }
};
}