我有一个购物车,我在foreach循环中迭代。购物车中的每个商品都需要添加到orderItemList数组中。
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只返回一个项目,即使它循环。
答案 0 :(得分: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
对象的示例,但我认为这是将所有购物车项目转换为List
OrderItem
个对象的最酷的单行方式:
List<OrderItem> newOrderItems = shoppingCart.Select(item =>
new OrderItem {orderItemId = item.Id, quantity = item.quantity}).ToList();
答案 1 :(得分:1)
每次在循环中你都会创建一个新数组(因此是“new []”),其中包含一个项目。无法更改数组的大小,因此请使用List&lt;&gt;对象:
@Provides
@ActivityScope
public providePresenter(ActivityA activity) {
return new PresenterA(activity);
}
列表&lt;&gt;可以像几乎所有目的一样对待。如果你需要一个阵列而不是你可以轻易转换它......
newOrderItems = new List<orderItem>();
foreach(var items in shoppingCart)
{
newOrderItems.Add(new orderItem { orderItemId = item.Id , quantity = item.quantity});
};
答案 2 :(得分: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();
答案 3 :(得分:0)
您需要在foreach循环之外声明var newOrderItems = new List<orderItem>();
,然后使用
newOrderItems.Add(new orderItem {...});
如果您在里面声明它,它将一次又一次地创建。
答案 4 :(得分:0)
尝试:
for(var item in shoppingCart){
var newOrderItems = new[] { new orderItem { orderItemId = item.Id , quantity = item.quantity }};
orderItemList = orderItemList.Concat(newOrderItems).ToArray();
}
没有测试它但它应该有用。