2011-04-08 91 views
0

這是之前發佈的問題的擴展。我試圖遞歸地構建一個字符串。我需要改變下面的函數來做到這一點 - 函數的每個遞歸生成所需的字符串,但我需要將它們連接在一起並返回整個字符串。 'related'作爲一個空字符串傳遞給函數,我認爲我使用string.Format的方式會將每個遞歸添加到'related'字符串中?顯然不是。幫助遞歸併返回值

不知道如何...

private string getRelatedNews(Taxonomy taxData, string related, string contentTitle) 
{ 
    foreach (TaxonomyItemData item in taxData.TaxonomyItems) 
     { 
      if (taxData.TaxonomyName.Equals(contentTitle) && taxData.TaxonomyItemCount != 0) 
      { 
       related = string.Format("{0}<li><a href='{1}'\">{2}</a></li>", related, item.Link, item.Name); 
      }     
     } 
    // Show all its sub categories 
    foreach (TaxonomyData cat in taxData.Taxonomy) 
     { 
      getRelatedNews(cat, related, contentTitle); 
     } 

    return(related); 

} 
+2

與此相關的一個問題是,您將創建大量被丟棄的字符串(增加GC壓力)。看看使用StringBuilder只建立一個字符串一次。 – Talljoe 2011-04-08 04:19:40

回答

5
foreach (TaxonomyData cat in taxData.Taxonomy) 
    { 
     getRelatedNews(cat, related, contentTitle); 
    } 

應該

foreach (TaxonomyData cat in taxData.Taxonomy) 
    { 
     related = getRelatedNews(cat, related, contentTitle); 
    } 

因爲字符串是不可變的。

+0

賓果。給出我期望的結果。謝謝。 – Nathan 2011-04-08 04:17:58

+0

不得不等待計時器,然後我才能接受... – Nathan 2011-04-08 04:31:49

0

那麼試試這個...

related = getRelatedNews(cat, related, contentTitle); 

我不知道你的邏輯和程序流...然後我也覺得遞歸函數必須這樣調用....

private string getRelatedNews(Taxonomy taxData, string related, string contentTitle) 
{ 
    foreach (TaxonomyItemData item in taxData.TaxonomyItems) 
     { 
      if (taxData.TaxonomyName.Equals(contentTitle) && taxData.TaxonomyItemCount != 0) 
      { 
       related = string.Format("{0}<li><a href='{1}'\">{2}</a></li>", related, item.Link, item.Name); 
      }     
     } 
    // Show all its sub categories 
    foreach (TaxonomyData cat in taxData.Taxonomy) 
     { 
      related = getRelatedNews(cat, related, contentTitle); 
     } 

    return(related); 

} 
+1

他是alreadt使用string.Format進行連接,你不應該做related = related + string.Format .... – JoDG 2011-04-08 04:16:59

+0

@JoDG ..謝謝標記我... – 2011-04-08 04:19:29