在IList中循环,并且缺少列表的最后一个成员

本文关键字:列表 最后一个 成员 IList 循环 | 更新日期: 2023-09-27 18:14:03

我下面有一个方法,它循环通过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);   
    }

在IList中循环,并且缺少列表的最后一个成员

yield return之后分配新的position值。

yield return conferences[position].CreateConference();
position = nextPos;

这条线路

position = nextPos;

甚至连电话都没有。尝试在return语句之前移动它。

尝试检查

var stopPos = conferences.Count - 1;

更改为

var stopPos = conferences.Count;

while (position < conferences.Count)

更改为

while (position <= conferences.Count)