如何迭代集合和更改值

本文关键字:集合 何迭代 迭代 | 更新日期: 2023-09-27 18:33:59

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

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);
                    }
                }
            }

如何迭代集合和更改值

试试

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.
}

使用 for loop 而不是 foreach loop

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);
        }
    }
}