遍历 IList 并缺少列表的最后一个成员
looping through an IList and missing last member of list
我在下面有这个方法,它循环通过 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);
}
尝试检查
var stopPos = conferences.Count - 1;
改为
var stopPos = conferences.Count;
和
while (position < conferences.Count)
改为
while (position <= conferences.Count)
您正在 yield return
之后分配 position
的新值。
yield return conferences[position].CreateConference();
position = nextPos;
这一行
position = nextPos;
它甚至没有被调用。尝试将其移动到 return
语句之前。
我在下面有这个方法,它循环通过 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);
}
尝试检查
var stopPos = conferences.Count - 1;
改为
var stopPos = conferences.Count;
和
while (position < conferences.Count)
改为
while (position <= conferences.Count)
您正在 yield return
之后分配 position
的新值。
yield return conferences[position].CreateConference();
position = nextPos;
这一行
position = nextPos;
它甚至没有被调用。尝试将其移动到 return
语句之前。