簡體   English   中英

使用for循環填充列表

[英]Populate list using a 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異常。 不確定如何使用for loop在新的Car實例中插入每個模型名稱。

編輯: data.Count是一個錯字,相同的異常,區別是使用拋出data.cars.Count 要澄清的是, data.cars.Count的長度是20個包含model屬性的對象。

可能您可以刪除此循環並使用單個linq行

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

您的實際代碼會觸發上述異常,因為無論data.Count是多少,它都不等於cars集合中元素的數量。 如果data.Count大於data.cars集合中元素的數量,則發生異常。

但是,您的代碼中還有另一個邏輯錯誤,在每個循環中,您的代碼都會創建一個包含單個Car元素的新List。 在每個循環中,您的代碼將此列表分配給外部變量car 當然,當循環退出時,您會將外部變量汽車分配給列表,而該列表僅包含循環中的最后一個元素。

如果您喜歡標准循環方法,則可以編寫

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

之所以會出現這種異常,是因為數據記錄的數量可能會高於每個數據中的汽車數量。 例如,數據可能是10個項目的集合,但每個數據記錄中的汽車集合只能包含一個或兩個元素。 因此,第一次,第二次和第三次迭代可能效果很好,但是之后您將得到一個例外。

嘗試跟隨

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM