2009-07-22 69 views
0

嘿,我有一個循環,將聚集的字符串和整數添加到對象中,然後將該對象添加到列表中。我需要它來檢查是否已經有一個對象具有一個屬性==給我要分配的對象,然後根據屬性是哪一個,我要麼改變它的一個屬性,要麼添加一個新的屬性目的。我將在稍後分類。這是我卡住的地方。我已經標記了該行(當前註釋掉),當它被激活時,會導致命令行凍結。奇怪的是,我早先使用IDENTICAL代碼沒有問題。將對象添加到列表時,c#循環失敗!

正如你所看到的,我還有一些其他的代碼目前已被註釋掉,因爲這個位需要在我能繼續之前工作,但是我留下了它讓你對我正在做的事有了更多的瞭解。

解決了。我實際上不得不將它向上移動兩圈。謝謝!

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

     } 
     } 

回答

6

具體的問題是,你正在追逐自己的尾巴。每次向列表添加新元素時,Refferals.Count都會上升(如果您繼續添加元素,您的循環將永遠不會結束)。您應該拉算出來到一個變量,並使用到您的循環或使用類似Referrals.Contains ...

var refSize = Refferals.Count(); 

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

+1打我10秒 – 2009-07-22 15:04:42

0

每次添加一個參照對象,以您的推薦列表中,您都導致環路採取一個額外的迭代。如果您在每次迭代中都添加引用,則循環將無限期運行。

嘗試在您註釋掉的行上放置一個斷點。它應該被反覆打擊。你正在經歷的凍結是由你的無限循環造成的。

1

問題是,在將它添加到列表後,循環會遍歷新添加的項目並再次添加它(可能是由於您在某處產生的錯誤),這將永遠重複。

你可以在調試器中瀏覽你的代碼並查看。

順便說一句,你不應該在循環中調用Count()方法。相反,使用Count屬性(無括號)