循环遍历IList并缺少列表的最后一个成员

时间:2016-10-19 17:57:58

标签: c# list c#-4.0 .net-4.5

我在下面使用此方法循环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);   
    }

2 个答案:

答案 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语句之前移动它。

相关问题