循环遍历此集合总是错过最后一个元素

时间:2016-10-21 18:43:27

标签: c# c#-4.0

我一直试图修复此循环一段时间。我经历了几代人。

此代码根据某些条件循环遍历植物对象集合,然后创建所需的植物对象。

应该使用列表中的每个对象。

直到列表中的最后一个对象为止。出于某种原因,它只是没有击中集合中的最后一个成员,它总是在之前停止执行。所以除了最后一个之外,我最终得到了所有我需要的新工厂类型的对象。

此列表使用这样的IList:

 IList<PlantType> plants;

这是循环:

 var currentPosition = 0;
 var nextPosition = (currentPosition + 1) % plants.Count;
 var stopPosition = plants.Count - 1;   
 var HalfLife = 90;  

 while ((nextPosition != stopPosition) && plants[currentPosition].cell_A + HalfLife >= plants[nextPosition].Cell_Z)
 {
     plantName = plantName + ";" + plants[currentPosition].Name;
     currentPosition = nextPosition;
     nextPosition = (currentPosition + 1) % plants.Count;
 }

 yield return
          CreateNewPlantType(plantName);

我尝试更改while语句的这一部分:

 (nextPosition != stopPosition) 

为:

 (nextPosition < stopPosition)

但它仍然错过了列表中的最后一个元素。

我也试过这个:

 (nextPosition <= stopPosition)

但这会产生无限循环!

所以我不确定如何解决这个问题。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

删除所有% plants.Count定义上的nextPosition。这些导致最后一个元素使nextPosition 0。

更改后(nextPosition <= stopPosition)应该有效。

您也可以将条件更改为while ((currentPosition < stopPosition) ...,我认为这也使代码更容易阅读。