遍历 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 语句之前。