正如你所看到的,我目前已经注释了其他一些代码,因为在我可以继续之前这个位需要工作,但我把它留下来让你更多地了解我在做什么。
解决。我实际上不得不向上移动另外两个循环。谢谢!
//IF THIS IS THE FIRST ONE, ADD IT!
var refSize = Referrals.Count();
if (refSize == 0)
{
var NewReferral = new Referral(referringURL.Trim(), referringWords.Trim(), 3);
Referrals.Add(NewReferral);
}
else
{
for (int i=0;i<refSize;i++)
{
// RESET BOOLS
URLPresent = false;
KeywordPresent = false;
// IF THE URL IS ALREADY PRESENT
//if (Referrals[i].URL == referringURL)
//{
//URLPresent = true;
// CHECK IF THE KEYWORD IS ALREADY PRESENT
//for (int ii=0;ii<Referrals[i].Keywords.Count;ii++)
//{
// if (Referrals[i].Keywords[ii] == referringWords)
// {
// ADD TO OCCURRENCES
// Referrals[i].Occurrences++;
// KeywordPresent = true;
// }
//}
// ADD KEYWORD TO LIST
// ###
// ###
//}
// IF THE KEYWORD ISN'T THERE && THE URL ISNT THERE, ADD A NEW REFERRAL OBJECT
if (URLPresent == false && KeywordPresent == false)
{
var NewReferral = new Referral(referringURL.Trim(), referringWords.Trim(), 3);
//Referrals.Add(NewReferral); //HERE IS MY PROBLEM! UNCOMMENTING THIS LINE CAUSES A FAIL.
//URLPresent = true;
//KeywordPresent = true;
}
// IF THE URL IS THERE, BUT THE KEYWORD ISNT, ADD AN ELEMENT TO THE REFERRAL.KEYWORDS LIST
//else if (URLPresent == true && KeywordPresent == false)
//{
//Referrals[i].Keywords.Add(referringWords);
//URLPresent = true;
//KeywordPresent = true;
//}
}
}
答案 0 :(得分:6)
具体问题是你在追逐自己的尾巴。每次向列表中添加新元素时,Refferals.Count都会上升(如果继续添加元素,则循环将永远不会结束)。您应该将计数拉入变量并将其用于循环或使用类似Referrals.Contains ......
var refSize = Refferals.Count();
for (int i=0;i < refSize; i++)
{
// same
}
答案 1 :(得分:1)
问题是,在将它添加到列表后,循环会运行新添加的项目并再次添加(可能是由于您在某处犯了错误),这将永远重复。
您可以在调试器中单步执行代码并查看。
顺便说一下,你不应该在循环中调用Count()
方法。相反,请使用Count
属性(不带括号)
答案 2 :(得分:0)
每次将推荐对象添加到推荐列表时,都会导致循环再进行一次迭代。如果你在每次迭代中不断添加引用,循环将无限运行。
尝试在您注释掉的行上放置断点。它应该反复击中。您遇到的冻结是由无限循环引起的。