我一直试图修复此循环一段时间。我经历了几代人。
此代码根据某些条件循环遍历植物对象集合,然后创建所需的植物对象。
应该使用列表中的每个对象。
直到列表中的最后一个对象为止。出于某种原因,它只是没有击中集合中的最后一个成员,它总是在之前停止执行。所以除了最后一个之外,我最终得到了所有我需要的新工厂类型的对象。
此列表使用这样的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)
但这会产生无限循环!
所以我不确定如何解决这个问题。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
删除所有% plants.Count
定义上的nextPosition
。这些导致最后一个元素使nextPosition
0。
更改后(nextPosition <= stopPosition)
应该有效。
您也可以将条件更改为while ((currentPosition < stopPosition) ...
,我认为这也使代码更容易阅读。