在C#

时间:2017-03-24 22:31:42

标签: c# arrays

我有一个购物车,我在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只返回一个项目,即使它循环。

5 个答案:

答案 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();
}

没有测试它但它应该有用。