我有一组循环,可以在更新数量时添加或删除集合列表。 删除循环完美地工作,但是添加循环仅应用了缩短的次数。
这是循环
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 )
我三倍检查了数学,但看不出为什么它没有运行了很多次。
答案 0 :(得分:3)
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&lt; = 8-5(3)。
您可以采取初始计数并改为使用它。
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();
}
答案 1 :(得分:0)
当您添加到lineItem.DelegatesList
时,您会增加lineItems.DelegatesList.Count
。这意味着它只会运行一半的次数。
在开始循环之前将计数存储在临时变量中,或者将项目添加到单独的列表中,之后将列表添加到line Item.DelegatesList
。