小编Dan*_*elD的帖子

循环返回AFTER退出(涉及IEnumerable)导致边界错误

我知道有很多方法可以对这只猫进行修饰,但是我遇到了一些基本的while循环问题,它们正常退出,但是在从父函数返回IEnumerable.ToList()时会返回(并增加计数器).基本上我要做的是搜索单个关键字的列表并过滤掉结果集,直到我只获得包含所有关键字的项目.

它退出循环,然后一旦命中返回,它就会返回到循环中,i变量增加另一个位置(高于count变量),因此broken [i]抛出一个极限之外的错误.

虽然我知道有更好的方法来执行搜索,但我也非常感兴趣为什么代码会返回到退出的循环,再次递增,并导致错误 - 以及如何修复它.这很奇怪,我以前从未见过这个.是因为.ToList强制枚举备份链吗?

码:

public IEnumerable<Item> GetItemsForSearch(string search=null)
    {
        ParserDataContext data = new ParserDataContext();            
        if (search != null && search != "")
        {                   
            string[] broken = search.Split(' ');                
            IEnumerable<Item> watches = data.Items.Where(x => x.Title.ToLower().Contains(broken[0].ToLower())).OrderByDescending(x => x.DateListed).ThenByDescending(x => x.ID);

            int i = 1;
            int count = broken.Count();
            while (i < count)
            {
                if (broken[i] != null)
                item = items.Where(x => x.Title.ToLower().Contains(broken[i].ToLower()));
                i++;
            }

            return items.Take(50).ToList();
        }
Run Code Online (Sandbox Code Playgroud)

}

c# ienumerable search loops

0
推荐指数
1
解决办法
114
查看次数

标签 统计

c# ×1

ienumerable ×1

loops ×1

search ×1