将对象添加到列表时,c#循环失败!

时间:2009-07-22 14:51:10

标签: c# list object loops

嘿,这个我有一个循环,它将收集的字符串和整数添加到一个对象中,然后将该对象添加到一个列表中。我需要它来检查是否已经有一个属性==的对象到我要分配的那个,然后根据属性是什么,我要么改变其中一个属性,要么仍然添加一个新属性宾语。我稍后会对此进行排序。这就是我被困的地方。我已经标记了行(当前已注释掉),当激活时,会导致命令行冻结。奇怪的是,我先前使用了IDENTICAL代码,没有任何问题。

正如你所看到的,我目前已经注释了其他一些代码,因为在我可以继续之前这个位需要工作,但我把它留下来让你更多地了解我在做什么。

解决。我实际上不得不向上移动另外两个循环。谢谢!

        //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;
            //}

        }
        }

3 个答案:

答案 0 :(得分:6)

具体问题是你在追逐自己的尾巴。每次向列表中添加新元素时,Refferals.Count都会上升(如果继续添加元素,则循环将永远不会结束)。您应该将计数拉入变量并将其用于循环或使用类似Referrals.Contains ......

var refSize = Refferals.Count();

for (int i=0;i < refSize; i++)
{
 // same
}

答案 1 :(得分:1)

问题是,在将它添加到列表后,循环会运行新添加的项目并再次添加(可能是由于您在某处犯了错误),这将永远重复。

您可以在调试器中单步执行代码并查看。

顺便说一下,你不应该在循环中调用Count()方法。相反,请使用Count属性(不带括号)

答案 2 :(得分:0)

每次将推荐对象添加到推荐列表时,都会导致循环再进行一次迭代。如果你在每次迭代中不断添加引用,循环将无限运行。

尝试在您注释掉的行上放置断点。它应该反复击中。您遇到的冻结是由无限循环引起的。