我在下面使用此方法循环IList以创建年度会议。
循环 工作,但 始终 会跳过IList中的最后一个会议。
我无法弄清楚它为什么会这样做。
我尝试了各种修复方法,但它们总是会创建无限循环。
我想我只需要另外一双眼睛来看看它。
我遗漏了一些细节,但循环的主要结构就在那里。
谢谢!
public static IEnumerable<YearEvents> AnnualConferences(IList<conference> conferences)
{
//if list is empty, get out
if (conferences.Count == 0)
{
yield break;
}
var position = 0;
var confExists = GetConf();
while (position < conferences.Count)
{
if (confExists)
{
CreateConferenceTitle(conferences[position].Title);
position++;
}
else
{
yield return
conferences[position].CreateConference();
break;
}
}
position = position % conferences.Count;
var stopPos = conferences.Count - 1;
do
{
var startPos = position;
var nextPos = (position + 1) % conferences.Count;
while (nextPos != stopPos)
{
CreateConferenceTitle(conferences[position].Title);
position = nextPos;
nextPos = (position + 1) % conferences.Count;
}
yield return
conferences[position].CreateConference();
position = nextPos;
} while (position != stopPos);
}
答案 0 :(得分:1)
尝试检查
var stopPos = conferences.Count - 1;
更改为
var stopPos = conferences.Count;
和
while (position < conferences.Count)
更改为
while (position <= conferences.Count)
答案 1 :(得分:1)
您在position
之后分配yield return
的新值。
yield return conferences[position].CreateConference();
position = nextPos;
这一行
position = nextPos;
甚至没有打电话。尝试在return
语句之前移动它。