我有一组循环,当数量更新时,这些循环会添加到集合列表中或从集合列表中删除。
删除循环可以完美地运行,但是加法循环仅应用较短的时间。

这是循环

public async Task UpdateLineItemByOrderLineId(int orderLineId, int newQuantity)
    {
        var clientBasket = await GetBasketAsync();
        var lineItem = clientBasket.OrderLines.FirstOrDefault(x => x.OrderLineId == orderLineId);
        if (newQuantity == 0)
        {
            foreach (var m in lineItem.DelegatesList.Where(f=>f.OrderLineId == orderLineId))
            {
                lineItem.DelegatesList.Remove(m);
            }
            _orderLinesRepository.Delete(lineItem);
            _orderLinesRepository.Save();
        }
        else
        {
            lineItem.Quantity = newQuantity;

            if (lineItem.DelegatesList.Count > newQuantity)
            {
                for (int i = lineItem.DelegatesList.Count - 1; i >= newQuantity; --i)
                {
                    lineItem.DelegatesList.RemoveAt(i);
                }
            }
            if (lineItem.DelegatesList.Count < newQuantity)
            {
                for (int z = 0; z <= newQuantity - lineItem.DelegatesList.Count; z++)
                {
                    lineItem.DelegatesList.Add(new OrderDelegate());
                }
            }
            await _basketRepository.SaveAsync();
        }
    }


在样本数据上会发生以下情况:
If newQuantity = 8 and delegateslists.count = 1它只能运行4次(taking delegateslist.count到5)

我检查了三倍的数学运算,但看不到为什么它没有运行整整时间。

最佳答案

for (int z = 0; z <= newQuantity - lineItem.DelegatesList.Count; z++)
{
    lineItem.DelegatesList.Add(new OrderDelegate());
}


您的for循环包含newQuantity - lineItem.DelegatesList.Count

lineItem.DelegatesList.Count随着循环的每次迭代而增加。

这意味着,随着Z的增加,它与减少的数字进行比较。


第一次运行,z = 0,newQuantity = 8,lineItem.DelegatesList.Count = 1。

第二次运行,z = 1,newQuantity = 8,lineItem.DelegatesList.Count = 2。

第三次运行,z = 2,newQuantity = 8,lineItem.DelegatesList.Count = 3。

第四次运行,z = 3,newQuantity = 8,lineItem.DelegatesList.Count = 4。

第五次运行,z = 4,newQuantity = 8,lineItem.DelegatesList.Count = 5。

 z <= newQuantity - lineItem.DelegatesList.Count;


在第五轮中,4
您可以只取初始计数,然后使用它。

else
{
    lineItem.Quantity = newQuantity;
    int initialCount = lineItem.DelegatesList.Count;

    if (lineItem.DelegatesList.Count > newQuantity)
    {
        for (int i = lineItem.DelegatesList.Count - 1; i >= newQuantity; --i)
        {
                lineItem.DelegatesList.RemoveAt(i);
        }
    }
    if (lineItem.DelegatesList.Count < newQuantity)
    {
        for (int z = 0; z <= newQuantity - initialCount; z++)
        {
            lineItem.DelegatesList.Add(new OrderDelegate());
        }
    }
    await _basketRepository.SaveAsync();
}

08-19 04:11