2017-03-24 68 views
0

我有一個購物車,我在foreach循環中遍歷。購物車中的每個商品都需要添加到一個orderItemList數組中。將項目添加到C#中的數組#

orderItemList = 
[{ 
orderItemId = 1, 
quantity = 2 
},{ 
orderItemId = 2, 
quantity =1 
}] 

所以我試圖用

foreach(var items in shoppingCart) 
{ 
var newOrderItems = new[] 
{ new orderItem { orderItemId = item.Id , quantity = item.quantity } 
}; 

它僅將購物車中的最後一個項目。它循環遍歷並創建每一個,但只添加最後一個。我錯過了什麼?

newOrderItems只會返回一個項目,即使它循環。

+4

你正在每個迭代中創建一個新的數組離子..? – stuartd

+0

這就是它的樣子,但我需要做的是向數組添加一個新項目。 –

+0

我需要一個數組中的多個項目。 –

回答

1

循環中的每一次你都在創建一個新的數組(因此是「new []」),其中有一個項目。陣列的大小不能被改變,以代替使用一個列表<>對象:

newOrderItems = new List<orderItem>(); 
foreach(var items in shoppingCart) 
{ 
    newOrderItems.Add(new orderItem { orderItemId = item.Id , quantity = item.quantity}); 
}; 

甲列表<>可以像幾乎所有目的的陣列進行處理。如果你需要一個數組比你可以輕鬆地將它...

var newOrderItemsArray = newOrderItems.ToArray(); 
+0

我看不出爲什麼這是公認的答案,因爲它不回答問題。問題是關於將數組添加到數組而不是列表,也沒有將列表轉換爲數組 –

+0

他每次都通過循環創建新數組,而不是將項添加到現有數組。事實上,你不能添加到數組,所以我建議使用List <>代替 –

1

就宣佈你的陣列外循環...這裏是一個使用數組的例子:

OrderItem[] newOrderItems = new OrderItem[shoppingCart.Length]; 

for (int i = 0; i < shoppingCart.Length; i++) 
{ 
    var item = shoppingCart[i]; 
    newOrderItems[i] = new OrderItem {orderItemId = item.Id, quantity = item.quantity}; 
} 

有使用List對象的其他例子,但我認爲這是最酷的一個在線的方式轉換成所有購物車中的物品進入OrderItemList一個對象:

List<OrderItem> newOrderItems = shoppingCart.Select(item => 
    new OrderItem {orderItemId = item.Id, quantity = item.quantity}).ToList(); 
+1

您正在創建一個列表,而不是一個數組。 – CrociDB

+1

@CrociDB - 謝謝,糾正。 –

+0

當他們真的只是一個長長的命令鏈時,我總是很不舒服地稱Linq語句爲「單行」。 – DavidG

0

您需要聲明var newOrderItems = new List<orderItem>();您的foreach循環,外面再使用

newOrderItems.Add(new orderItem {...}); 

如果你在裏面聲明它,它會被一次又一次地創建。

+1

數組沒有Add方法。你的回答將不起作用 –

+1

當然。我確定了答案,謝謝。 – IngoB

1

而不是使用數組,考慮使用替代框架提供的泛型集合類之一。這些設計將被添加到並已刪除(在許多其他事情,例如:

var orderItems = new List<orderItem>(); 

foreach(var items in shoppingCart) 
{ 
    orderItems.Add(new orderItem 
    { 
     orderItemId = item.Id, 
     quantity = item.quantity 
    }); 
}; 

你甚至可以做到這一點的LINQ和消除foreach

var orderItems = shoppingCart 
    .Select(s => new orderItem 
    { 
     orderItemId = item.Id, 
     quantity = item.quantity 
    }) 
    .ToList(); 
0

嘗試:

for(var item in shoppingCart){ 
    var newOrderItems = new[] { new orderItem { orderItemId = item.Id , quantity = item.quantity }}; 
    orderItemList = orderItemList.Concat(newOrderItems).ToArray(); 
} 

沒有得到測試,但它應該工作

+1

爲什麼downvote?你只需要指出。雖然修復了。因爲它沒有編譯,所以它是 –

+0

。不適當的'for'語法,'item'沒有被定義(現在是這樣),'order'沒有被定義,等等... –

+1

已經更新了。 –