我有一组循环,当数量更新时,这些循环会添加到集合列表中或从集合列表中删除。
删除循环可以完美地运行,但是加法循环仅应用较短的时间。
这是循环
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();
}