-5

我知道这是一个愚蠢的问题,因为您无法在循环中修改循环集合,但我确实需要更改它。我知道我不能更改引用的对象,但我不知道该怎么做。

var orders = _orderService.GetOrders(o => !o.Deleted &&
                                          o.OrderStatus != OrderStatus.Cancelled &&
                                          o.OrderStatus != OrderStatus.Complete);
foreach (var order in orders)
{
    if (order.PaymentStatus == PaymentStatus.Paid)
    {
        if (order.ShippingStatus == ShippingStatus.ShippingNotRequired || order.ShippingStatus == ShippingStatus.Delivered)
        {       
           var tempOrder = _orderService.GetOrderById(order.Id);                 
            SetOrderStatus(tempOrder , OrderStatus.Complete, true);
        }
    }
}

我总是得到一个错误。

更新:我改成这个

 var orders = _orderService.GetOrders(o => !o.Deleted &&
                         o.OrderStatus != OrderStatus.Cancelled && o.OrderStatus != OrderStatus.CompletE);

            List<int> orderIndex = new List<int>();
            orders.ToList().ForEach(x => orderIndex.Add(x.Id));

           foreach(var index in orderIndex)
           {
                var order = _orderService.GetOrderById(index);
                if (order.PaymentStatus == PaymentStatus.Paid)
                {
                    if (order.ShippingStatus == ShippingStatus.ShippingNotRequired || order.ShippingStatus == ShippingStatus.Delivered)
                    {

                        SetOrderStatus(order, OrderStatus.Complete, true);
                    }
                }
            }
4

2 回答 2

3

尝试

int count = orders.Count;  // the length of the collect : may need a different method for different collection types.
for(int i = 0; i < count; i++)
{
    var current = orders[i];
    // do stuff with current.
}
于 2013-10-04T11:59:35.563 回答
0

使用 for 循环而不是 foreach 循环

for(int i=0; i<orders.Count; i++)
{
    if (orders[i].PaymentStatus == PaymentStatus.Paid)
    {
        if (orders[i].ShippingStatus == ShippingStatus.ShippingNotRequired || orders[i].ShippingStatus == ShippingStatus.Delivered)
        {       
           var tempOrder = _orderService.GetOrderById(orders[i].Id);                 
            SetOrderStatus(tempOrder , OrderStatus.Complete, true);
        }
    }
}
于 2013-10-04T11:58:17.197 回答