我知道有很多方法可以对这只猫进行修饰,但是我遇到了一些基本的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)
}